DE102020126212A1 - Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers - Google Patents

Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers Download PDF

Info

Publication number
DE102020126212A1
DE102020126212A1 DE102020126212.4A DE102020126212A DE102020126212A1 DE 102020126212 A1 DE102020126212 A1 DE 102020126212A1 DE 102020126212 A DE102020126212 A DE 102020126212A DE 102020126212 A1 DE102020126212 A1 DE 102020126212A1
Authority
DE
Germany
Prior art keywords
dimensional
matrix
input matrix
buffer
dimensional input
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
DE102020126212.4A
Other languages
English (en)
Inventor
Zeev Sperber
Amit Gradstein
Simon Rubanovich
Gavri BERGER
Ron Schneider
Sagi MELLER
Jose YALLOUZ
Saeed KHAROUF
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 DE102020126212A1 publication Critical patent/DE102020126212A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/30098Register arrangements
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

Es werden Systeme, Verfahren und Vorrichtungen bezüglich eines Matrixoperationsbeschleuniger beschrieben. In einer Ausführungsform enthält ein Prozessor eine Matrixoperations-Beschleunigerschaltung, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen enthält, das in eine Planungsbetriebsart zur Ausführung eines decodierten einzelnen Befehls schaltbar ist, wobei die Matrixoperations-Beschleunigerschaltung einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen aus ersten mehreren Registern lädt, die eine erste zweidimensionale Eingangsmatrix repräsentieren, prüft, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie eine zweite zweidimensionale Eingangsmatrix aus zweiten mehreren Registern ist, die die erste zweidimensionale Eingangsmatrix repräsentieren, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert: die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls verhindert, eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer ausführt, um ein Ergebnis zu erzeugen, und das Ergebnis im Ergebnisspeicher speichert, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert: die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen lädt, die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer ausführt, um ein Ergebnis zu erzeugen, und das Ergebnis im Ergebnisspeicher speichert.

Description

  • TECHNISCHES GEBIET
  • Die Offenbarung bezieht sich im Allgemeinen auf eine Computerprozessorarchitektur und spezifischer auf Vorrichtungen, Systeme und Verfahren zum Ausführen von Befehlen, um eine Matrixoperation unter Verwendung einer Matrixoperations-Beschleunigerschaltung auszu führen.
  • HINTERGRUND
  • Ein Prozessor oder ein Satz von Prozessoren führt Befehle von einem Befehlssatz, z. B. der Befehlssatzarchitektur (ISA), aus. Dieser Befehlssatz ist der Teil der Computer-Architektur, der auf die Programmierung bezogen ist, und enthält im Allgemeinen die nativen Datentypen, die Befehle, die Registerarchitektur, die Adressierungsbetriebsarten, die Speicherarchitektur, die Unterbrechungs- und Ausnahmebehandlung und die externe Eingabe und Ausgabe (E/A). Es sollte angegeben werden, dass sich der Begriff Befehl hier auf einen Makrobefehl, z. B. einen Befehl, der dem Prozessor zur Ausführung bereitgestellt wird, oder auf einen Mikrobefehl, z. B. einen Befehl, der sich von dem Decodierer des Prozessors, der die Makrobefehl decodiert, ergibt, beziehen kann.
  • Figurenliste
  • Die vorliegende Offenbarung ist beispielhaft und nicht zur Einschränkung in den Figuren der beigefügten Zeichnungen veranschaulicht, in der gleiche Bezugszeichen ähnliche Elemente angeben und in denen:
    • 1A veranschaulicht eine Ausführungsform konfigurierter Kacheln gemäß den Ausführungsformen der Offenbarung.
    • 1B veranschaulicht eine Ausführungsform konfigurierter Kacheln gemäß den Ausführungsformen der Offenbarung.
    • 2 veranschaulicht mehrere Beispiele eines Matrixspeichers gemäß den Ausführungsformen der Offenbarung.
    • 3 veranschaulicht eine Ausführungsform eines Systems unter Verwendung eines Matrix- (Kachel-) Operationsbeschleunigers gemäß den Ausführungsformen der Offenbarung.
    • 4 und 5 zeigen verschiedene Ausführungsformen, wie der Speicher unter Verwendung eines Matrixoperationsbeschleunigers gemeinsam benutzt wird.
    • 6 veranschaulicht eine Ausführungsform der Matrix-Multiplikations-Akkumulations-Operation unter Verwendung von Kacheln („TMMA“).
    • 7 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls.
    • 8 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls.
    • 9 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls.
    • 10 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls.
    • 11 veranschaulicht SIMD-Implementierungen in der Größe einer Potenz von zwei, wobei die Akkumulatoren Eingangsgrößen verwenden, die größer als die Eingaben in die Multiplikatoren sind, gemäß einer Ausführungsform.
    • 12 veranschaulicht eine Ausführungsform eines Systems unter Verwendung einer Matrixoperationsschaltungsanordnung.
    • 13 veranschaulicht eine Ausführungsform einer Prozessorkern-Pipeline, die Matrixoperationen unter Verwendung von Kacheln unterstützt.
    • 14 veranschaulicht eine Ausführungsform einer Prozessorkern-Pipeline, die Matrixoperationen unter Verwendung von Kacheln unterstützt.
    • 15 veranschaulicht ein Beispiel einer Matrix, die im Zeilenhauptformat und im Spaltenhauptformat ausgedrückt ist.
    • 16 veranschaulicht ein Beispiel der Verwendung von Matrizen (Kacheln).
    • 17 veranschaulicht eine Ausführungsform eines Verfahren zum Verwenden von Matrizen (Kacheln).
    • 18 veranschaulicht die Unterstützung für die Konfiguration der Verwendung von Kacheln gemäß einer Ausführungsform.
    • 19 veranschaulicht eine Ausführungsform einer Beschreibung der zu unterstützenden Matrizen (Kacheln).
    • 20(A)-(D) veranschaulichen Beispiele eines Registers (von Registern).
    • 21 veranschaulicht eine Ausführungsform eines Systems unter Verwendung eines Matrix- (Kachel-) Operationsbeschleunigers gemäß den Ausführungsformen der Offenbarung.
    • 22 veranschaulicht eine Matrixoperations-Beschleunigerschaltung, die ein zweidimensionales Gitter aus Verarbeitungselementschaltungen umfasst, gemäß den Ausführungsformen der Offenbarung.
    • 23 veranschaulicht eine Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung gemäß den Ausführungsformen der Offenbarung.
    • 24 veranschaulicht eine Planungsschaltungsanordnung einer Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung gemäß den Ausführungsformen der Offenbarung.
    • 25 veranschaulicht eine Planungsschaltungsanordnung einer Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung, die von einer Basisplanungsbetriebsart in eine Planungsbetriebsart umschaltbar ist, der eine Eingangsmatrix gemäß den Ausführungsformen der Offenbarung wiederverwendet.
    • 26 veranschaulicht eine Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung für mehrere Durchläufe gemäß den Ausführungsformen der Offenbarung.
    • 27 veranschaulicht eine Planungsschaltungsanordnung einer Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung für mehrere Durchläufe gemäß den Ausführungsformen der Offenbarung.
    • 28 veranschaulicht einen Pseudocode für eine Matrixoperationsschaltungsanordnung gemäß den Ausführungsformen der Offenbarung.
    • 29 veranschaulicht ein Verfahren zum Verarbeiten eines Matrixoperationsbefehls gemäß den Ausführungsformen der Offenbarung.
    • 30A ist ein Blockschaltplan, der ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen der Klasse A gemäß den Ausführungsformen der Offenbarung veranschaulicht.
    • 30B ist ein Blockschaltplan, der das generische vektorfreundliche Befehlsformat und dessen Befehlsschablonen der Klasse B gemäß den Ausführungsformen der Offenbarung veranschaulicht.
    • 31A ist ein Blockschaltplan, der die Felder für die generischen vektorfreundlichen Befehlsformate in den 30A und 30B gemäß den Ausführungsformen der Offenbarung veranschaulicht.
    • 31 B ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats in 31A, die ein vollständiges Opcode-Feld bilden, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
    • 31C ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats in 31A, die ein Registerindexfeld bilden, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
    • 31D ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats in 31A, die das Vergrößerungsoperationsfeld 3050 bilden, gemäß einer Ausführungsform der Offenbarung veranschaulicht.
    • 32 ist ein Blockschaltplan einer Registerarchitektur gemäß einer Ausführungsform der Offenbarung.
    • 33A ist ein Blockschaltplan, der sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß den Ausführungsformen der Offenbarung veranschaulicht.
    • 33B ist ein Blockschaltplan, der sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften Out-of-Order-Ausgabe-/Ausführungsarchitekturkerns mit Registerumbenennung, die in einem Prozessor enthalten sind, gemäß den Ausführungsformen der Offenbarung veranschaulicht.
    • 34A ist ein Blockschaltplan eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zu einem Zusammenschaltungsnetz auf dem Die und seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches) gemäß den Ausführungsformen der Offenbarung.
    • 34B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 34A gemäß den Ausführungsformen der Offenbarung.
    • 35 ist ein Blockschaltplan eines Prozessors, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß den Ausführungsformen der Offenbarung.
    • 36 ist ein Blockschaltplan eines Systems in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
    • 37 ist ein Blockschaltplan eines spezifischeren beispielhaften Systems in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
    • 38 zeigt einen Blockschaltplan eines zweiten spezifischeren beispielhaften Systems in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
    • 39 zeigt einen Blockschaltplan eines Systems auf einem Chip (SoC) in Übereinstimmung mit einer Ausführungsform der vorliegenden Offenbarung.
    • 40 ist ein Blockschaltplan, der die Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz umzusetzen, gemäß den Ausführungsformen der Offenbarung gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten dargelegt. Es ist jedoch selbstverständlich, dass die Ausführungsformen ohne diese spezifischen Einzelheiten praktiziert werden können. In anderen Fällen sind wohlbekannte Schaltungen, Strukturen und Techniken nicht ausführlich gezeigt worden, um das Verstehen dieser Beschreibung nicht zu verbergen.
  • Die Bezugnahmen in der Beschreibung auf „eine einzige Ausführungsform“, „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. geben an, dass die beschriebene Ausführungsform ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Eigenschaft enthalten kann, aber jede Ausführungsform nicht notwendigerweise das spezielle Merkmal, die spezielle Struktur oder die spezielle Eigenschaft enthalten kann. Überdies beziehen sich derartige Ausdrücke nicht notwendigerweise auf dieselbe Ausführungsform. Wenn ferner ein spezielles Merkmal, eine spezielle Struktur oder eine spezielle Eigenschaft im Zusammenhang mit einer Ausführungsform beschrieben ist, wird vorgebracht, dass es sich innerhalb der Kenntnis eines Fachmanns auf dem Gebiet befindet, ein derartiges Merkmal, eine derartige Struktur oder eine derartige Eigenschaft im Zusammenhang mit anderen Ausführungsformen zu beeinflussen, ob es explizit beschrieben ist oder nicht.
  • Matrizen können bei vielen Rechenaufgaben, wie z. B. maschinellem Lernen und anderer Massendatenverarbeitung, zunehmend wichtig sein. Das tiefe Lernen ist eine Klasse von Algorithmen des maschinellen Lernens. Die Architekturen für tiefes Lernen, wie z. B. tiefe neuronale Netze, können in Bereichen einschließlich Computersehen, Spracherkennung, Verarbeitung natürlicher Sprache, Audio-Erkennung, Filterung sozialer Netze, maschinelle Übersetzung, Bioinformatik und Medikamentenentwicklung angewendet werden.
  • Folgerung und Training, zwei Werkzeuge, die für tiefes Lernen verwendet werden, können Arithmetik mit niedriger Genauigkeit verwenden. Das Maximieren des Durchsatzes der Algorithmen und Berechnungen des tiefen Lernens kann es unterstützen, den Anforderungen der Prozessoren des tiefen Lernens zu entsprechen, z. B. jener, die tiefes Lernen in einem Datenzentrum ausführen.
  • Eine Matrix-Matrix-Multiplikation (auch bekannt als GEMM oder allgemeine Matrixmultiplikation) ist eine rechenintensive Operation in bestimmten Prozessoren. Spezielle Hardware für die Matrixmultiplikation (z. B. GEMM) ist eine gute Option zum Verbessern der Spitzenberechnung (und des Energiewirkungsgrads) bestimmter Anwendungen, wie z. B. des tiefen Lernens. Einige dieser Anwendungen, einschließlich des tiefen Lernens, können auf Eingabedatenelementen mit relativ wenigen Bits wirken, ohne Genauigkeit zu verlieren, solange wie die Ausgangselemente ausreichend Bits (z. B. mehr als die Eingaben) aufweisen.
  • In bestimmten Prozessoren ist die Handhabung von Matrizen eine schwierige und/oder befehlsintensive Aufgabe. Die Zeilen einer Matrix könnten z. B. in mehrere gepackte Daten- (z. B. SIMD- oder Vektor-) Register gesetzt und dann einzeln auf sie gewirkt werden. Ein Addieren von zwei 8 x 2-Matrizen (z. B. Zeile mal Spalte) kann abhängig von den Datengrößen ein Laden oder Sammeln in vier gepackte Datenregister erfordern. Dann wird eine erste Addition von gepackten Datenregistern, die einer ersten Zeile aus jeder Matrix entspricht, ausgeführt und eine zweite Addition von gepackten Datenregistern, die einer zweiten Zeile aus jeder Matrix entspricht, ausgeführt. Dann werden die resultierenden gepackten Datenregister zurück in den Speicher gestreut. Während dieses Szenario für kleine Matrizen akzeptabel sein kann, ist es bei größeren Matrizen oft nicht akzeptabel.
  • ERÖRTERUNG
  • Hier werden Mechanismen beschrieben, um Matrixoperationen in Computer-Hardware, wie z. B. Zentraleinheiten (CPUs), Graphikverarbeitungseinheiten (GPUs) und Beschleunigern, zu unterstützen. Die Matrixoperationen verwenden 2-dimensionale (2-D-) Datenstrukturen, die einen oder mehrere gepackte Bereiche des Speichers, wie z. B. Register, repräsentieren. Überall in dieser Beschreibung werden diese 2-D-Datenstrukturen als Kacheln bezeichnet. Es wird angegeben, dass eine Matrix kleiner als eine Kachel sein (weniger als alles der Kachel verwenden) kann oder mehrere Kacheln verwenden kann (die Matrix ist größer als die Größe irgendeiner Kachel). Überall in der Beschreibung wird die Sprache der Matrix (Kachel) verwendet, um Operationen anzugeben, die unter Verwendung von Kacheln ausgeführt werden und sich auf eine Matrix auswirken; ob die Matrix größer als irgendeine Kachel ist oder nicht, ist typischerweise nicht relevant.
  • Auf jede Kachel kann durch verschiedene Operationen gewirkt werden, wie z. B. jene, die hier ausführlich beschriebenen sind, die enthalten, aber nicht eingeschränkt sind auf: eine Matrix- (Kachel-) Multiplikation, eine Kacheladdition, eine Kachelsubtraktion, eine Kacheldiagonale, eine Kachelnull, eine Kacheltransformation, ein Kachelskalarprodukt, eine Kachelrundsendung, eine Kachelzeilen-Rundsendung, eine Kachelspalten-Rundsendung, eine Kachelmultiplikation, eine Kachelmultiplikation und -akkumulation, eine Kachelverschiebung usw. Zusätzlich kann eine Unterstützung für Operatoren, wie z. B. die Verwendung einer Skalierung und/oder Verzerrung, bei diesen Operationen oder zur Unterstützung von nicht-numerischen Anwendungen in der Zukunft verwendet werden, z. B. OpenCL „lokaler Speicher“, Datenkomprimierung/-dekomprimierung usw. Hierin sind außerdem Befehle zum Ausführen von Matrixoperationen (z. B. TILEPARTIALDOTPRODUCT) beschrieben.
  • Abschnitte des Speichers (wie z. B. Speicher (nichtflüchtig und flüchtig), Register, Cache usw.) sind in Kacheln unterschiedlicher horizontaler und vertikaler Dimensionen angeordnet. Eine Kachel kann z. B. eine horizontale Dimension von 4 (z. B. vier Zeilen einer Matrix) und eine vertikale Dimension von 8 (z. B. 8 Spalten der Matrix) aufweisen. Typischerweise ist die horizontale Dimension auf die Elementgrößen (z. B. 2-, 4-, 8-, 16-, 32-, 64-, 128-Bit usw.) bezogen. Mehrere Datentypen (Gleitkomma mit einfacher Genauigkeit, Gleitkomma mit doppelter Genauigkeit, Ganzzahlen usw.) können unterstützt werden.
  • BEISPIELHAFTE VERWENDUNG KONFIGURIERTER KACHELN
  • In einigen Ausführungsformen können die Kachelparameter konfiguriert werden. Eine gegebene Kachel kann z. B. konfiguriert werden, um Kacheloptionen bereitzustellen. Beispielhafte Kacheloptionen enthalten, sind aber nicht eingeschränkt auf: eine Anzahl von Zeilen der Kachel, eine Anzahl von Spalten der Kachel, ob die Kachel GÜLTIG ist und ob die Kachel aus einem PAAR von Kacheln gleicher Größe besteht.
  • 1A veranschaulicht eine Ausführungsform konfigurierter Kacheln. Wie gezeigt ist, weisen 4 kB des Anwendungsspeichers 102 4 1-kB-Kacheln, eine Kachel t0 104, eine Kachel t1 106, eine Kachel t2 108 und eine Kachel t3 110, darin gespeichert auf. In diesem Beispiel bestehen die 4 Kacheln nicht aus Paaren, wobei jede in Zeilen und Spalten angeordnete Elemente aufweist. Die Kachel t0 104 und die Kachel t1 106 weisen K Zeilen und N Spalten mit 4-Byte-Elementen (z. B. Daten mit einfacher Genauigkeit) auf, wobei K gleich 8 ist und N = 32 ist. Die Kachel t2 108 und die Kachel t3 110 weisen K Zeilen und N/2 Spalten mit 8-Byte-Elementen (z. B. Daten mit doppelter Genauigkeit) auf. Da die Operanden mit doppelter Genauigkeit die doppelte Breite der mit einfacher Genauigkeit aufweisen, ist diese Konfiguration mit einer Palette konsistent, die verwendet wird, um Kacheloptionen bereitzustellen, die wenigstens 4 Namen mit einem Gesamtspeicher von wenigstens 4 kB liefern. In Betrieb können die Kacheln unter Verwendung von Lade- und Speicheroperationen aus dem Speicher geladen und in dem Speicher gespeichert werden. Abhängig von dem verwendeten Befehlscodierungsschema variieren sowohl die Menge des verfügbaren Anwendungsspeichers als auch die Größe, die Anzahl und die Konfiguration der verfügbaren Kacheln.
  • 1B veranschaulicht eine Ausführungsform konfigurierter Kacheln. Wie gezeigt ist, weisen 4 kB des Anwendungsspeichers 122 2 Paare von 1kB-Kacheln darin gespeichert auf, wobei das erste Paar die Kachel t4L 124 und die Kachel t4R 126 aufweist und das zweite Paar die Kachel t5L 128 und die Kachel t5R 130 aufweist. Wie gezeigt ist, sind die Paare von Kacheln in eine linke Kachel und eine rechte Kachel aufgeteilt. In anderen Ausführungsformen ist das Paar von Kacheln in eine geradzahlige Kachel und eine ungeradzahlige Kachel aufteilt. In diesem Beispiel weist jede der 4 Kacheln Elemente auf, die in Zeilen und Spalten angeordnet sind. Die Kachel t4L 124 und die Kachel t4R 126 weisen K Zeilen und N Spalten mit 4-Byte-Elementen (z. B. Gleitkommadaten mit einfacher Genauigkeit) auf, wobei K gleich 8 ist und N gleich 32 ist. Die Kachel t5L 128 und die Kachel t5R 130 weisen K Zeilen und N/2 Spalten mit 8-Byte-Elementen (z. B. Gleitkommadaten mit doppelter Genauigkeit) auf. Da die Operanden mit doppelter Genauigkeit die doppelt Breite der mit einfacher Genauigkeit aufweisen, ist diese Konfiguration mit einer Palette konsistent, die verwendet wird, um Kacheloptionen bereitzustellen, die wenigstens zwei Namen mit einem Gesamtspeicher von wenigstens 4 kB liefern. Die vier Kacheln nach 1A verwenden 4 Namen, wobei jede eine 1-kB-Kachel benennt, wohingegen die 2 Paare von Kacheln in 1B 2 Namen verwenden können, um die paarweisen Kacheln zu spezifizieren. In einigen Ausführungsformen akzeptieren die Kachelbefehle den Namen einer paarweisen Kachel als Operanden. In Betrieb können die Kacheln unter Verwendung von Lade- und Speicheroperationen aus dem Speicher geladen und in dem Speicher gespeichert werden. Abhängig dem verwendeten Befehlscodierungsschema variieren sowohl die Menge des verfügbaren Anwendungsspeichers als auch die Größe, die Anzahl und die Konfiguration der verfügbaren Kacheln.
  • In einigen Ausführungsformen sind Kachelparameter definierbar. Eine „Palette“ wird z. B. verwendet, um Kacheloptionen bereitzustellen. Beispielhafte Optionen enthalten, sind aber nicht eingeschränkt auf: die Anzahl der Kachelnamen, die Anzahl der Bytes in einer Zeile des Speichers, die Anzahl der Zeilen und der Spalten in einer Kachel usw. Eine maximale „Höhe“ (Anzahl der Zeilen) einer Kachel kann z. B. definiert werden als: Maximale Zeilen der Kachel = Architektierter Speicher/ ( Die Anzahl der Palettennamen * Die Anzahl der Bytes pro  Zeile ) .
    Figure DE102020126212A1_0001
  • Eine Anwendung als solche kann so geschrieben sein, dass eine feste Verwendung von Namen die unterschiedlichen Speichergrößen über die Implementierungen ausnutzen kann.
  • Die Konfiguration von Kacheln wird unter Verwendung eines Kachelkonfigurationsbefehls („TILECONFIG“) ausgeführt, wobei eine spezielle Kachelverwendung in einer ausgewählten Palette definiert ist. Diese Deklaration enthält die Anzahl der zu verwendenden Kachelnamen, die angeforderte Anzahl von Zeilen und Spalten pro Name (Kachel) und, in einigen Ausführungsformen, den angeforderten Datentyp jeder Kachel. In einigen Ausführungsformen werden während der Ausführung eines TILECONFIG-Befehls Konsistenzprüfungen ausgeführt, um zu bestimmen, dass er den Einschränkungen des Paletteneintrags entspricht.
  • BEISPIELHAFTE KACHELSPEICHERTYPEN
  • 2 veranschaulicht mehrere Beispiele des Matrixspeichers. In (A) ist eine Kachel im Speicher gespeichert. Wie gezeigt ist, besteht jede „Zeile“ aus vier gepackten Datenelementen. Um zur nächsten „Zeile“ zu gelangen, wird ein Schrittwert verwendet. Es wird angegeben, dass Zeilen nacheinander im Speicher gespeichert sein können. Überschrittene Speicherzugriffe ermöglichen den Zugriff von einer Zeile zur nächsten, wenn der Kachelspeicher die zugrundeliegende Zeilenbreite der Speicheranordnung nicht abbildet.
  • Das Laden von Kacheln aus dem Speicher und das Speichern von Kacheln in den Speicher sind typischerweise überschrittene Zugriffe vom Anwendungsspeicher auf gepackte Zeilen von Daten. Beispielhafte TILELOAD- und TILESTORE-Befehle oder andere Befehlsbezugnahmen auf den Anwendungsspeicher als einen TILE-Operand in Lade-Op-Befehlen sind in einigen Ausführungsformen neu startbar, um (bis zu) 2*Zeilen von Seitenfehlern, unmaskierten Gleitkomma-Ausnahmen und/oder Unterbrechungen pro Befehl abzuwickeln.
  • In (B) ist eine Matrix in einer Kachel gespeichert, die aus mehreren Registern, wie z. B. Registern für gepackte Daten (Einzelbefehls-, Mehrfachdaten- (SIMD-) oder Vektorregister), besteht. In diesem Beispiel ist die Kachel drei physischen Registern überlagert. Typischerweise werden aufeinanderfolgende Register verwendet, dies muss jedoch nicht der Fall sein.
  • In (C) ist eine Matrix in einer Kachel in einem Nicht-Registerspeicher gespeichert, der für eine verschmolzene Multiplikations-Akkumulations-Schaltung (FMA-Schaltung) zugänglich ist, die bei Kacheloperationen verwendet wird. Dieser Speicher kann sich innerhalb einer FMA oder ihr benachbart befinden. Zusätzlich kann in einigen Ausführungsformen, die im Folgenden erörtert werden, der Speicher für ein Datenelement und nicht für eine ganze Zeile oder Kachel sein.
  • Die unterstützten Parameter für die TMMA-Architektur werden über eine CPUID gemeldet. In einigen Ausführungsformen enthält die Liste der Informationen eine maximale Höhe und eine maximale SIMD-Dimension. Das Konfigurieren der TMMA-Architektur erfordert das Spezifizieren der Dimensionen für jede Kachel, der Elementgröße für jede Kachel und die Palettenkennung. Diese Konfiguration wird durch das Ausführen des TILECONFIG-Befehls ausgeführt.
  • Die erfolgreiche Ausführung eines TILECONFIG-Befehls ermöglicht nachfolgende TILE-Operatoren. Ein TILERELEASEALL-Befehl löscht die Kachelkonfiguration und deaktiviert die TILE-Operationen (bis der nächste TILECONFIG-Befehl ausgeführt wird). In einigen Ausführungsformen werden XSAVE, XSTORE usw. beim Kontextwechsel unter Verwendung von Kacheln verwendet. In einigen Ausführungsformen werden in XSAVE 2 XCR0-Bits verwendet, eines für TILECONFIG-Metadaten und ein Bit, das den tatsächlichen Kachel-Nutzdaten entspricht.
  • TILECONFIG konfiguriert nicht nur die Kachelverwendung, sondern setzt auch eine Zustandsvariable, die angibt, dass sich das Programm in einem Codebereich mit konfigurierten Kacheln befindet. Eine Implementierung kann die Einschränkungen für andere Befehle aufzählen, die mit einem Kachelbereich verwendet werden können, wie z. B. keine Verwendung eines vorhandenen Registersatzes usw.
  • Das Verlassen eines Kachelbereichs wird typischerweise mit dem TILERELEASEALL-Befehl ausgeführt. Er beansprucht keine Parameter und macht schnell alle Kacheln ungültig, (was angibt, dass die Daten irgendein Sichern oder Wiederherstellen nicht länger benötigen) und löscht den internen Zustand, der dem Vorhandensein in einem Kachelbereich entspricht.
  • In einigen Ausführungsformen setzen die Kacheloperationen alle Zeilen und alle Spalten jenseits der durch die Kachelkonfiguration spezifizierten Dimensionen auf null. Die Kacheloperationen setzen z. B. die Daten jenseits der konfigurierten Anzahl von Spalten auf null (wobei die Größe der Elemente berücksichtigt wird), während jede Zeile geschrieben wird. Bei 64-Byte-Zeilen und einer mit 10 Zeilen und 12 Spalten konfigurierten Kachel würde eine Operation, die FP32-Elemente schreibt, jede der ersten 10 Zeilen mit 12*4 Bytes mit Ausgangs-/Ergebnisdaten schreiben und die verbleibenden 4*4 Bytes in jeder Zeile auf null setzen. Die Kacheloperationen setzen außerdem alle Zeilen nach den ersten 10 konfigurierten Zeilen vollständig auf null. Wenn eine 1 K-Kachel mit 64-Byte-Zeilen verwendet wird, würde es 16 Zeilen geben, so dass in diesem Beispiel die letzten 6 Zeilen außerdem auf null gesetzt würden.
  • In einigen Ausführungsformen erzwingt ein Kontextwiederherstellungsbefehl (z. B. XRSTOR), wenn Daten geladen werden, dass die Daten jenseits der konfigurierten Zeilen für eine Kachel als null aufrechterhalten werden. Falls es keine gültige Konfiguration gibt, werden alle Zeilen auf null gesetzt. XRSTOR der Kacheldaten kann Datenmüll in die Spalten jenseits jener laden, die konfiguriert sind. Es sollte nicht möglich sein, dass XRSTOR über die Anzahl der konfigurierten Spalten hinaus löscht, weil es keine der Kachelkonfiguration zugeordnete Elementbreite gibt.
  • Die Kontextspeicherung (z. B. XSAVE) legt den gesamten TILE-Speicherbereich frei, wenn er in den Speicher geschrieben wird. Falls XRSTOR Müll-Daten in den ganz rechten Teil einer Kachel geladen hat, werden diese Daten durch XSAVE gespeichert. XSAVE schreibt Nullen für die Zeilen jenseits der für jede Kachel spezifizierten Anzahl.
  • In einigen Ausführungsformen sind Kachelbefehle neu startbar. Die Operationen, die auf den Speicher zugreifen, ermöglichen einen Neustart nach Seitenfehlern. Die Rechenbefehle, die Gleitkommaoperationen behandeln, erlauben außerdem unmaskierte Gleitkommaausnahmen, wobei die Maskierung der Ausnahmen durch ein Steuer- und/oder Statusregister gesteuert ist.
  • Um Neustartbefehle nach diesen Ereignissen zu unterstützen, speichern die Befehle Informationen in den im Folgenden ausführlich beschriebenen Startregistern.
  • MATRIX- (KACHEL-) BETRIEBSSYSTEME
  • BEISPIELHAFTE HARDWARE-UNTERSTÜTZUNG
  • 3 veranschaulicht eine Ausführungsform eines Systems unter Verwendung eines Matrix- (Kachel-) Operationsbeschleunigers. In dieser Veranschaulichung überträgt ein Host-Prozessor/Verarbeitungssystem 301 die Befehle 311 (z. B. Matrixmanipulationsoperationen, wie z. B. arithmetische oder Matrixmanipulationsoperationen oder Lade- und Speicheroperationen) an einen Matrixoperationsbeschleuniger 307. Dies ist jedoch auf diese Weise nur zu Erörterungszwecken gezeigt. Wie später ausführlicher beschrieben wird, kann dieser Beschleuniger 307 ein Teil eines Verarbeitungskerns sein. Typischerweise beziehen sich die Befehle 311, die Kachelmanipulations-Operatorbefehle sind, auf Kacheln als ein Register-Register- („reg-reg“-) oder Register-Speicher- („reg-mem“)- Format. Andere Befehle, wie z. B. TILESTORE, TILELOAD, TILECONFIG usw., führen keine Datenoperationen an einer Kachel aus. Die Befehle können decodierte Befehle (z. B. Mikro-Ops) oder Makrobefehle zum Abwickeln für den Beschleuniger 307 sein.
  • In diesem Beispiel ist eine kohärente Speicherschnittstelle 303 mit dem Host-Prozessor/Verarbeitungssystem 301 und dem Matrixoperationsbeschleuniger 307 gekoppelt, so dass sie den Speicher gemeinsam benutzen können. Die 4 und 5 zeigen verschiedene Ausführungsformen dessen, wie der Speicher unter Verwendung eines Matrixoperationsbeschleunigers gemeinsamen benutzt wird. Wie in 4 gezeigt ist, benutzen der Host-Prozessor 401 und die Matrixoperationsbeschleuniger-Schaltungsanordnung 405 denselben Speicher 403 gemeinsam. 5 veranschaulicht eine Ausführungsform, bei der der Host-Prozessor 501 und der Matrixoperationsbeschleuniger 505 den Speicher nicht gemeinsam benutzen, sondern auf den Speicher des jeweils anderen zugreifen können. Der Prozessor 501 kann z. B. auf den Kachelspeicher 507 zugreifen und seinen Host-Speicher 503 wie gewohnt verwenden. Ähnlich kann der Matrixoperationsbeschleuniger 505 auf den Host-Speicher 503 zugreifen, wobei er aber typischerweise seinen eigenen Speicher 507 verwendet. Es wird angegeben, dass diese Speicher verschiedene Typen sein können.
  • In einigen Ausführungsformen sind die Kacheln mit einer Überlagerung über die physischen Register unterstützt. Eine Kachel kann z. B. abhängig von der Implementierung 16 1.024-Bit-Register, 32 512-Bit-Register usw. verwenden. In einigen Ausführungsformen verwenden die Matrixoperationen 2-dimensionale (2-D-) Datenstrukturen, die einen oder mehrere gepackte Speicherbereiche, wie z. B. Register, repräsentieren. Überall in dieser Beschreibung werden diese 2-D-Datenstrukturen als Kacheln oder Kachelregister bezeichnet.
  • In einigen Ausführungsformen enthält der Matrixoperationsbeschleuniger 307 mehrere FMAs 309, die an die Datenpuffer 305 gekoppelt sind (in einigen Implementierungen sind einer oder mehrere dieser Puffer 305 in den FMAs des Gitters gespeichert, wie gezeigt ist). Die Datenpuffer 305 puffern die Kacheln, die aus dem Speicher geladen werden, und/oder die Kacheln, die im Speicher gespeichert werden sollen, (z. B. unter Verwendung eines Kachellade- oder Kachelspeicher-Befehls). Die Datenpuffer können z. B. mehrere Register sein. Typischerweise sind diese FMAs als ein Gitter aus verketteten FMAs 309 angeordnet, die Kacheln lesen und schreiben können. In diesem Beispiel soll der Matrixoperationsbeschleuniger 307 eine Matrixmultiplikationsoperation unter Verwendung der Kacheln T0, T1 und T2 ausführen. Wenigstens eine der Kacheln ist im FMA-Gitter 309 untergebracht. In einigen Ausführungsformen sind alle Kacheln in einer Operation im FMA-Gitter 309 gespeichert. In anderen Ausführungsformen ist nur eine Teilmenge im FMA-Gitter 309 gespeichert. Wie gezeigt ist, ist T1 untergebracht und sind es T0 und T2 nicht. Es wird angegeben, dass sich A, B und C auf die Matrizen dieser Kacheln beziehen, die den gesamten Raum der Kachel einnehmen können oder nicht.
  • 6 veranschaulicht eine Ausführungsform der Matrix-Multiplikations-Akkumulations-Operation unter Verwendung von Kacheln („TMMA“).
  • Die Anzahl der Zeilen in der Matrix (Kachel A 601) entspricht der Anzahl der seriellen (verketteten) FMAs, die die Latenzzeit der Berechnung in bestimmten Ausführungsformen ausmachen. Einer Implementierung ist frei, auf einem Gitter mit einer kleineren Höhe zu zirkulieren, wobei aber die Berechnung die gleiche bleibt.
  • Der Quell-/Zielvektor kommt aus einer Kachel von N Zeilen (Kachel C 605), wobei das Gitter der FMAs 611 N Vektor-Matrix-Operationen ausführt, die zu einem vollständigen Befehl führen, der eine Matrixmultiplikation von Kacheln ausführt. Die Kachel B 603 ist die andere Vektorquelle und liefert den FMAs in jeder Stufe die „Rundsende“-Terme.
  • In einigen Ausführungsformen sind in Betrieb die Elemente der Matrix B (die in einer Kachel B 603 gespeichert sind) über das rechteckige Gitter der FMAs verteilt. Die Matrix B (die in einer Kachel A 601 gespeichert ist) weist ihre Elemente einer Zeile transformiert auf, so dass sie mit der Spaltendimension des rechteckigen Gitters der FMAs zusammenpassen. An jeder FMA im Gitter werden ein Element von A und B multipliziert und zum ankommenden Summanden (von oben in der Figur) addiert, wobei die ausgehende Summe zur nächsten Zeile der FMAs (oder den endgültigen Ausgang) weitergeleitet wird.
  • Die Latenzzeit eines einzelnen Schrittes ist proportional zu K (der Zeilenhöhe der Matrix B), wobei abhängige TMMAs typischerweise ausreichend Quell-Ziel-Zeilen (entweder in einer einzelnen Kachel oder über eine Kachel) aufweisen, um diese Latenzzeit zu verbergen. Eine Implementierung kann außerdem die SIMD-Dimension M (des gepackten Datenelements) (die Zeilenhöhe der Matrix A) über Zeitschritte aufteilen, wobei dies aber einfach die Konstante, mit der K multipliziert wird, ändert. Wenn ein Programm ein kleineres K als das von der TMMA der aufgezählte Maximum spezifiziert, ist eine Implementierung frei, dies mit „Maskierung“ oder „frühen Ausgaben“ zu implementieren.
  • Die Latenzzeit einer gesamten TMMA ist zu N * K proportional. Die Wiederholrate ist proportional zu N. Die Anzahl der MACs pro TMMA-Befehl ist N * K * M.
  • 7 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls. Insbesondere veranschaulicht dies die Ausführungsschaltungsanordnung einer Iteration einer Position eines gepackten Datenelements des Ziels. In dieser Ausführungsform wirkt das verkettete verschmolzene Multiplizieren-Akkumulieren auf vorzeichenbehaftete Quellen, wobei der Akkumulator 2x die Größe der Eingangsdaten aufweist.
  • Eine erste vorzeichenbehaftete Quelle (Quelle 1 701) und eine zweite vorzeichenbehaftete Quelle (Quelle 2 703) weisen jede vier gepackte Datenelemente auf. Jedes dieser gepackten Datenelemente speichert vorzeichenbehaftete Daten, wie z. B. Gleitkommadaten. Eine dritte vorzeichenbehaftete Quelle (Quelle 3 709) weist zwei gepackte Datenelemente auf, von denen jedes vorzeichenbehaftete Daten speichert. Die Größen der ersten und zweiten vorzeichenbehafteten Quelle 701 und 703 sind ein halb der der dritten vorzeichenbehafteten Quelle (Anfangswert oder vorheriges Ergebnis) 709. Die erste und die zweite vorzeichenbehaftete Quelle 701 und 703 könnten z. B. gepackte 32-Bit-Datenelemente (z. B. Gleitkomma mit einfacher Genauigkeit) aufweisen, während die dritte vorzeichenbehaftete Quelle 709 gepackte 64-Bit-Datenelemente (z. B. Gleitkomma mit doppelter Genauigkeit) aufweisen könnte.
  • In dieser Veranschaulichung sind nur die beiden höchstwertigen Positionen der gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 701 und 703 und die höchstwertige Position des gepackte Datenelements der dritten vorzeichenbehafteten Quelle 709 gezeigt. Selbstverständlich würden die anderen Positionen der gepackten Datenelemente außerdem verarbeitet werden.
  • Wie veranschaulicht ist, werden die gepackten Datenelemente paarweise verarbeitet. Die Daten der höchstwertigen Positionen der gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 701 und 703 werden z. B. unter Verwendung einer Multipliziererschaltung 705 multipliziert, während die Daten der Positionen der zweithöchstwertigen gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 701 und 703 unter Verwendung einer Multipliziererschaltung 707 multipliziert werden. In einigen Ausführungsformen werden diese Multipliziererschaltungen 705 und 707 für die anderen Positionen der gepackten Datenelemente wiederverwendet. In anderen Ausführungsformen werden zusätzliche Multipliziererschaltungen verwendet, so dass die gepackten Datenelemente parallel verarbeitet werden. In einigen Kontexten wird die parallele Ausführung unter Verwendung von Bahnen ausgeführt, die die Größe der vorzeichenbehafteten dritten Quelle 709 aufweisen. Die Ergebnisse jeder der Multiplikationen werden unter Verwendung der Additionsschaltungsanordnung 711 addiert.
  • Das Ergebnis der Addition der Ergebnisse der Multiplikationen wird (unter Verwendung eines anderen Addierers 713 oder desselben Addierers 711) zu den Daten von der Position des höchstwertigen gepackten Datenelements der vorzeichenbehafteten Quelle 3 709 addiert.
  • Schließlich wird das Ergebnis der zweiten Addition entweder in dem vorzeichenbehaftete Ziel 715 an einer Position des gepackten Datenelements gespeichert, die der von der vorzeichenbehafteten dritten Quelle 709 verwendeten Position des gepackten Datenelements entspricht, oder zu der nächsten Iteration weitergegeben, falls es eine gibt. In einigen Ausführungsformen wird auf diesen Speicher eine Schreibmaske angewendet, so dass, falls eine entsprechende Schreibmaske (ein entsprechendes Bit) gesetzt ist, die Speicherung geschieht, und, falls sie nicht gesetzt ist, die Speicherung nicht geschieht.
  • 8 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls. Insbesondere veranschaulicht dies die Ausführungsschaltungsanordnung einer Iteration einer Position eines gepackten Datenelements des Ziels. In dieser Ausführungsform wirkt die verkettete verschmolzene Multiplikations-Akkumulation auf vorzeichenbehaftete Quellen, wobei der Akkumulator 2x die Größe der Eingangsdaten aufweist.
  • Eine erste vorzeichenbehaftete Quelle (Quelle 1 801) und eine zweite vorzeichenbehaftete Quelle (Quelle 2 803) weisen jede vier gepackte Datenelemente auf. Jedes dieser gepackten Datenelemente speichert vorzeichenbehaftete Daten, wie z. B. ganzzahlige Daten. Eine dritte vorzeichenbehaftete Quelle (Quelle 3 809) weist zwei gepackte Datenelemente auf, von denen jedes vorzeichenbehaftete Daten speichert. Die Größen der ersten und zweiten vorzeichenbehafteten Quelle 801 und 803 sind ein halb der der dritten vorzeichenbehafteten Quelle 809. Die erste und die zweite vorzeichenbehaftete Quelle 801 und 803 könnten z. B. gepackte 32-Bit-Datenelemente (z. B. Gleitkomma mit einfacher Genauigkeit) aufweisen, während die dritte vorzeichenbehaftete Quelle 809 gepackte 64-Bit-Datenelemente (z. B. Gleitkomma mit doppelter Genauigkeit) aufweisen könnte.
  • In dieser Veranschaulichung sind nur die Positionen der beiden höchstwertigen gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 801 und 803 und die Position des höchstwertigen gepackte Datenelements der dritten vorzeichenbehafteten Quelle 809 gezeigt. Selbstverständlich würden die anderen Positionen des gepackten Datenelements außerdem verarbeitet werden.
  • Wie veranschaulicht ist, werden die gepackten Datenelemente paarweise verarbeitet. Die Daten der Positionen der höchstwertigen gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 801 und 803 werden z. B. unter Verwendung einer Multipliziererschaltung 805 multipliziert, während die Daten von den Positionen der zweithöchstwertigen gepackten Datenelemente der ersten und der zweiten vorzeichenbehafteten Quelle 801 und 803 unter Verwendung einer Multipliziererschaltung 807 multipliziert werden. In einigen Ausführungsformen werden diese Multipliziererschaltungen 805 und 807 für die anderen Positionen der gepackten Datenelemente wiederverwendet. In anderen Ausführungsformen werden zusätzliche Multipliziererschaltungen verwendet, so dass die gepackten Datenelemente parallel verarbeitet werden. In einigen Kontexten wird die parallele Ausführung unter Verwendung von Bahnen ausgeführt, die die Größe der vorzeichenbehafteten dritten Quelle (Anfangswert oder Ergebnis der vorherigen Iteration) 809 aufweisen. Die Ergebnisse jeder der Multiplikationen werden unter Verwendung der Additions-/Sättigungsschaltungsanordnung 813 zur vorzeichenbehafteten dritten Quelle 809 addiert.
  • Die Additions-/Sättigungs- (Akkumulator-) Schaltungsanordnung 813 behält das Vorzeichen eines Operanden bei, wenn die Addition zu einem zu großen Wert führt. Insbesondere findet die Sättigungsauswertung an dem Ergebnis mit unendlicher Genauigkeit zwischen der Mehrwegeaddition und dem Schreiben in das Ziel oder der nächsten Iteration statt. Wenn der Akkumulator 813 Gleitkomma ist und die Eingangsterme ganzzahlig sind, werden die Summe der Produkte und der Gleitkomma-Akkumulator-Eingangswert in Werte mit unendlicher Genauigkeit (Festkommazahlen mit Hunderten von Bits) umgewandelt, wird die Addition der Multiplikationsergebnisse und der dritten Eingabe ausgeführt und wird ein einziges Runden zu dem tatsächlichen Akkumulatortyp ausgeführt.
  • Eine vorzeichenlose Sättigung bedeutet, dass die Ausgangswerte auf eine maximale vorzeichenlose Zahl für diese Elementbreite (alle 1s) begrenzt sind. Eine vorzeichenbehaftete Sättigung bedeutet, dass ein Wert begrenzt ist, so dass es sich in dem Bereich zwischen einer minimalen negativen Zahl und einer maximalen positiven Zahl für diese Elementbreite befindet (für Bytes ist der Bereich z. B. zwischen -128 (= -2^7) und 127 (= 2^7 - 1)).
  • Das Ergebnis der Addition und der Sättigungsprüfung wird in dem vorzeichenbehafteten Ergebnis 815 an einer Position des gepackten Datenelements gespeichert, die der Position des gepackten Datenelements entspricht, die von der vorzeichenbehafteten dritten Quelle 809 verwendet, oder zu der nächsten Iteration weitergegeben, falls es eine gibt. In einigen Ausführungsformen wird auf diesen Speicher eine Schreibmaske angewendet, so dass, falls eine entsprechende Schreibmaske (ein entsprechendes Bit) gesetzt ist, die Speicherung geschieht, und, falls sie nicht gesetzt ist, die Speicherung nicht geschieht.
  • 9 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration eines verketteten verschmolzenen Multiplikations-Akkumulations-Befehls. Insbesondere veranschaulicht dies die Ausführungsschaltungsanordnung einer Iteration einer Position eines gepackten Datenelements des Ziels. In dieser Ausführungsform wirkt die verkettete verschmolzene Multiplikations-Akkumulation auf eine vorzeichenbehaftete Quelle und eine vorzeichenlose Quelle, wobei der Akkumulator 4x die Größe der Eingangsdaten aufweist.
  • Eine erste vorzeichenbehaftete Quelle (Quelle 1 901) und eine zweite vorzeichenlose Quelle (Quelle 2 903) weisen jede vier gepackte Datenelemente auf. Jedes dieser gepackten Datenelemente weist Daten, wie z. B. Gleitkomma- oder Ganzzahldaten, auf. Eine dritte vorzeichenbehaftete Quelle (ein Anfangswert oder Ergebnis 915) weist ein gepacktes Datenelement aus, das vorzeichenbehaftete Daten gespeichert. Die Größen der ersten und der zweiten Quelle 901 und 903 sind ein Viertel der der dritten vorzeichenbehafteten Quelle 915. Die erste und die zweite Quelle 901 und 903 könnten z. B. gepackte 16-Bit-Datenelemente (z. B. ein Wort) aufweisen, während die dritte vorzeichenbehaftete Quelle 915 gepackte 64-Bit-Datenelemente (z. B. eine Gleitkommazahl mit doppelter Genauigkeit oder eine 64-Bit-Ganzzahl) aufweisen könnte.
  • In dieser Veranschaulichung sind die Positionen der vier höchstwertigen gepackten Datenelemente der ersten und der zweiten Quelle 901 und 903 und die Position des höchstwertigen gepackten Datenelements der dritten vorzeichenbehafteten Quelle 915 gezeigt. Selbstverständlich würden die anderen Positionen des gepacktes Datenelements außerdem verarbeitet werden, falls es welche gibt.
  • Wie veranschaulicht ist, werden die gepackten Datenelemente in Vierergruppen verarbeitet. Die Daten der Positionen der höchstwertigen gepackten Datenelemente der ersten und der zweiten Quelle 901 und 903 werden z. B. unter Verwendung einer Multipliziererschaltung 905 multipliziert, die Daten der Positionen der zweithöchstwertigsten gepackten Datenelemente der ersten und der zweiten Quelle 901 und 903 werden unter Verwendung einer Multipliziererschaltung 907 multipliziert, die Daten der Positionen der dritthöchstwertigen gepackten Datenelemente der ersten und der zweiten Quelle 901 und 903 werden unter Verwendung einer Multipliziererschaltung 909 multipliziert und die Daten der Positionen der niedrigstwertigen gepackten Datenelemente der ersten und der zweiten Quelle 901 und 903 werden unter Verwendung einer Multipliziererschaltung 911 multipliziert. In einigen Ausführungsformen werden vor den Multiplikationen die vorzeichenbehafteten gepackten Datenelemente der ersten Quelle 901 vorzeichenerweitert und die vorzeichenlosen gepackten Datenelemente der zweiten Quelle 903 mit null erweitert.
  • In einigen Ausführungsformen werden diese Multipliziererschaltungen 905-911 für die anderen Positionen der gepackten Datenelemente wiederverwendet. In anderen Ausführungsformen werden zusätzliche Multipliziererschaltungen verwendet, so dass die gepackten Datenelemente parallel verarbeitet werden. In einigen Kontexten wird die parallele Ausführung unter Verwendung von Bahnen ausgeführt, die die Größe der vorzeichenbehafteten dritten Quelle 915 aufweisen. Die Ergebnisse jeder der Multiplikationen werden unter Verwendung der Additionsschaltungsanordnung 913 addiert.
  • Das Ergebnis der Addition der Ergebnisse der Multiplikationen wird zu den Daten von der Position des höchstwertigen gepackten Datenelements der vorzeichenbehafteten Quelle 3 915 (unter Verwendung eines anderen Addierers 917 oder desselben Addierers 913) addiert.
  • Schließlich wird das Ergebnis 919 der zweiten Addition entweder in dem vorzeichenbehaftete Ziel an einer Position des gepackten Datenelements gespeichert, die der von der vorzeichenbehafteten dritten Quelle 915 verwendeten Position des gepackten Datenelements entspricht, oder zu der nächsten Iteration weitergegeben. In einigen Ausführungsformen wird auf diesen Speicher eine Schreibmaske angewendet, so dass, falls eine entsprechende Schreibmaske (ein entsprechendes Bit) gesetzt ist, die Speicherung geschieht, und, falls sie nicht gesetzt ist, die Speicherung nicht geschieht.
  • 10 veranschaulicht eine Ausführungsform einer Teilmenge der Ausführung einer Iteration des verketteten verschmolzenen Multiplikations-Akkumulations-Befehls. Insbesondere veranschaulicht dies die Ausführungsschaltungsanordnung einer Iteration einer Position eines gepackten Datenelements des Ziels. In dieser Ausführungsform wirkt die verkettete verschmolzene Multiplikations-Akkumulation auf eine vorzeichenbehaftete Quelle und eine vorzeichenlose Quelle, wobei der Akkumulator 4x die Größe der Eingangsdaten ist.
  • Eine erste vorzeichenbehaftete Quelle 1001 und eine zweite vorzeichenlose Quelle 1003 weisen jede vier gepackte Datenelemente auf. Jedes dieser gepackten Datenelemente speichert Daten, wie z. B. Gleitkomma- oder Ganzzahldaten. Eine dritte vorzeichenbehaftete Quelle 1015 (ein anfängliches oder vorheriges Ergebnis) weist ein gepacktes Datenelement auf, das vorzeichenbehaftete Daten speichert. Die Größen der ersten und der zweiten Quelle sind ein Viertel der der dritten vorzeichenbehafteten Quelle 1015 (des anfänglichen oder vorherigen Ergebnisses). Die erste und die zweite Quelle könnten z. B. gepackte 16-Bit-Datenelemente (z. B. ein Wort) aufweisen, während die dritte vorzeichenbehaftete Quelle 1015 (das anfängliche oder vorherige Ergebnis) gepackte 64-Bit-Datenelemente (z. B. Gleitkomma mit doppelter Genauigkeit oder 64-Bit-Ganzzahl) aufweisen könnte.
  • In dieser Veranschaulichung sind die Positionen der vier höchstwertigen gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 und der zweiten vorzeichenlosen Quelle 1003 und die Position des höchstwertigen gepackten Datenelements der dritten vorzeichenbehafteten Quelle 1015 gezeigt. Selbstverständlich würden die anderen Positionen der gepackten Datenelemente außerdem verarbeitet werden, falls es welche gibt.
  • Wie veranschaulicht, werden die gepackten Datenelemente in Vierergruppen verarbeitet. Die Daten der Positionen der höchstwertigen gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 und der zweiten vorzeichenlosen Quelle 1003 werden z. B. unter Verwendung einer Multipliziererschaltung 1005 multipliziert, die Daten der Positionen der zweithöchstwertigen gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 und der zweiten vorzeichenlosen Quelle 1003 werden unter Verwendung einer Multipliziererschaltung 1007 multipliziert, die Daten der Positionen der dritthöchstwertigen gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 und der zweiten vorzeichenlosen Quelle 1003 werden unter Verwendung einer Multipliziererschaltung 1009 multipliziert und die Daten der Positionen der niedrigstwertigen gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 und der zweiten vorzeichenlosen Quelle 1003 werden unter Verwendung einer Multipliziererschaltung 1011 multipliziert. In einigen Ausführungsformen werden vor den Multiplikationen die vorzeichenbehafteten gepackten Datenelemente der ersten vorzeichenbehafteten Quelle 1001 vorzeichenerweitert und die vorzeichenlosen gepackten Datenelemente der zweiten vorzeichenlosen Quelle 1003 mit null erweitert.
  • In einigen Ausführungsformen werden diese Multipliziererschaltungen 1005-1011 für andere Positionen gepackter Datenelemente wiederverwendet. In anderen Ausführungsformen werden zusätzliche Multipliziererschaltungen verwendet, so dass die gepackten Datenelemente parallel verarbeitet werden. In einigen Kontexten wird die parallele Ausführung unter Verwendung von Bahnen ausgeführt, die die Größe der dritten vorzeichenbehafteten Quelle 1015 (des anfänglichen oder vorherigen Ergebnisses) aufweisen. Das Ergebnis der Addition der Ergebnisse der Multiplikationen wird unter Verwendung einer Addierer-/Sättigungsschaltungsanordnung 1013 zu den Daten von der Position des höchstwertigen gepackten Datenelements der dritten vorzeichenbehafteten Quelle 1015 (des anfänglichen oder vorherigen Ergebnisses) addiert.
  • Die Additions-/Sättigungs- (Akkumulator-) Schaltungsanordnung 1013 behält ein Vorzeichen eines Operanden bei, wenn die Addition einen Wert ergibt, der zu groß oder zu klein für eine vorzeichenbehaftete Sättigung ist. Insbesondere erfolgt die Sättigungsauswertung an den Ergebnis mit unendlicher Genauigkeit zwischen der Mehrwegeaddition und dem Schreiben in das Ziel. Wenn der Akkumulator 1013 Gleitkomma ist und die Eingabeterme ganzzahlig sind, werden die Summe der Produkte und der Eingangswert des Gleitkomma-Akkumulators in Werte mit unendlicher Genauigkeit (Festkommazahlen mit Hunderten von Bits) umgewandelt, wird die Addition der Multiplikationsergebnisse und der dritten Eingabe ausgeführt und wird ein einziges Runden zu dem tatsächlichen Akkumulatortyp ausgeführt.
  • Das Ergebnis 1019 der Addition und der Sättigungsprüfung wird im vorzeichenbehafteten Ziel an einer Position des gepackten Datenelements gespeichert, die der Position des gepackten Datenelements entspricht, die von der dritten vorzeichenbehafteten Quelle 1015 (dem anfänglichen oder vorherigen Ergebnis) verwendet wird, oder zu der nächsten Iteration weitergegeben. In einigen Ausführungsformen wird auf diesen Speicher eine Schreibmaske angewendet, so dass, falls eine entsprechende Schreibmaske (ein entsprechendes Bit) gesetzt ist, die Speicherung geschieht, und, falls sie nicht gesetzt ist, die Speicherung nicht geschieht.
  • 11 veranschaulicht die SIMD-Implementierungen in der Größe einer Potenz von zwei, bei denen die Akkumulatoren die Eingangsgrößen verwenden, die größer als die Eingaben in die Multiplizierer sind, gemäß einer Ausführungsform. Es wird angegeben, dass die Quelle (für die Multiplizierer) und die Akkumulatorwerte vorzeichenbehaftete oder vorzeichenlose Werte sein können. Für einen Akkumulator mit 2X Eingangsgrößen (mit anderen Worten, der Akkumulator-Eingangswert ist das Doppelte der Größen der gepackten Datenelemente der Quellen) veranschaulicht Tabelle 1101 verschiedene Konfigurationen. Für Quellen in Bytegröße verwendet der Akkumulator Wort- oder Gleitkommawerte mit halber Genauigkeit (HPFP-Werte), die 16 Bits groß sind. Für Quellen in Wortgröße verwendet der Akkumulator 32-Bit-Ganzzahl- oder Gleitkommawerte in einfacher Genauigkeit (SPFP-Werte), die 32-Bit groß sind. Für SPFP- oder ganzzahlige 32 Bit große Quellen verwendet der Akkumulator 64-Ganzzahl- oder Gleitkommawerte in doppelter Genauigkeit (DPFP-Werte), die 64 Bit groß sind.
  • Für einen Akkumulator mit 4X Eingangsgrößen (mit anderen Worten, der Akkumulatoreingangswert ist viermal die Größe der Größen der gepackten Datenelemente der Quellen) veranschaulicht Tabelle 1103 verschiedene Konfigurationen. Für bytegroße Quellen verwendet der Akkumulator 32-Bit-Ganzzahl- oder Gleitkommawerte in einfacher Genauigkeit (SPFP-Werte), die 32-Bit groß sind. Für Quellen in Wortgröße verwendet der Akkumulator in einigen Ausführungsformen 64-Bit-Ganzzahl- oder Gleitkommawerte in doppelter Genauigkeit (DPFP-Werte), die 64-Bit groß sind.
  • Für einen Akkumulator mit 8X Eingabegrößen (mit anderen Worten, der Akkumulatoreingangswert ist achtmal die Größe der Größen der gepackten Datenelemente der Quellen) veranschaulicht Tabelle 1105 eine Konfiguration. Für Quellen in Bytegröße verwendet der Akkumulator eine 64-Bit-Ganzzahl.
  • Wie früher angedeutet worden ist, kann eine Matrixoperationsschaltungsanordnung in einem Kern oder als ein externer Beschleuniger enthalten sein. 12 veranschaulicht eine Ausführungsform eines Systems unter Verwendung einer Matrixoperationsschaltungsanordnung. In dieser Veranschaulichung sind mehrere Entitäten mit einer Ringzusammenschaltung 1245 gekoppelt.
  • Mehrere Kerne, ein Kern 0 1201, ein Kern 1 1203, ein Kern 2 1205 und ein Kern N 1207, stellen eine nicht auf Kacheln basierend Befehlsunterstützung bereit. In einigen Ausführungsformen ist die Matrixoperationsschaltungsanordnung 1251 in einem Kern 1203 bereitgestellt, während in anderen Ausführungsformen die Matrixoperationsschaltungsanordnung 1211 und 1213 über die Ringzusammenschaltung 1245 zugänglich sind.
  • Zusätzlich sind ein oder mehrere Speicher-Controller 1223-1225 bereitgestellt, um mit dem Speicher 1233 und 1231 im Namen der Kerne und/oder der Matrixoperationsschaltungsanordnung zu kommunizieren.
  • 13 veranschaulicht eine Ausführungsform einer Prozessorkern-Pipeline, die Matrixoperationen unter Verwendung von Kacheln unterstützt. Die Verzweigungsvorhersage- und Decodierschaltungsanordnung 1303 führt eine Verzweigungsvorhersage von Befehlen, das Decodieren von Befehlen und/oder beides von den Befehlen aus, die im Befehlsspeicher 1301 gespeichert sind. Die hier ausführlich beschriebenen Befehle können z. B. im Befehlsspeicher gespeichert sein. In einigen Implementierungen wird für die Verzweigungsvorhersage eine separate Schaltungsanordnung verwendet, wobei in einigen Ausführungsformen wenigstens einige Befehle in eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuersignale unter Verwendung des Mikrocodes 1305 decodiert werden. Die Verzweigungsvorhersage- und Decodierungsschaltungsanordnung 1303 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein. Die Beispiele der geeigneten Mechanismen enthalten Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Festwertspeicher (Mikrocode-ROMs) usw., sind aber nicht darauf eingeschränkt.
  • Die Verzweigungsvorhersage- und Decodierschaltungsanordnung 1303 ist an eine Zuweisungs-/Umbenennungsschaltungsanordnung 1307 gekoppelt, die in einigen Ausführungsformen an die Scheduler-Schaltungsanordnung 1309 gekoppelt ist. In einigen Ausführungsformen stellen diese Schaltungen eine Registerumbenennungs-, eine Registerzuweisungs- und/oder Planungsfunktionalität durch das Ausführen eines oder mehrerer des Folgenden bereit: 1) Umbenennen von logischen Operandenwerten in physische Operandenwerte (z. B. eine Register-Alias-Tabelle in einigen Ausführungsformen), 2) Zuweisen von Statusbits und -merkern zu dem decodierten Befehl und 3) Planen des decodierten Befehls zur Ausführung in einer Ausführungsschaltungsanordnung aus einem Befehlspool (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Scheduler-Schaltungsanordnung 1309 repräsentiert irgendeine Anzahl von verschiedenen Schedulern, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Scheduler-Schaltungsanordnung 1309 ist an die physische(n) Registerdatei(en) 1315 gekoppelt oder enthält die physische(n) Registerdatei(en) 1315. Jede der physischen Registerdatei(en) 1315 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie z. B. skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektor-Gleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist), Kacheln usw. In einer Ausführungsform umfasst (umfassen) die physische(n) Registerdatei(en) 1315 eine Vektorregister-Schaltungsanordnung, eine Schreibmaskenregister-Schaltungsanordnung und eine Schaltungsanordnung skalarer Register. Diese Registerschaltungen können ArchitekturVektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische(n) Registerdatei(en) 1315 ist (sind) durch eine Stilllegungsschaltung 1317 überlappt, um verschiedene Weisen zu veranschaulichen, in denen die Registerumbenennung und die Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung eines Umordnungspuffers (von Umordnungspuffern) und einer (von) Stilllegungsregisterdatei(en); unter Verwendung einer (von) zukünftigen Datei(en), eines Historiepuffers (von Historiepuffern) und einer (von) Stilllegungsregisterdatei(en); unter Verwendung von Registerabbildungen und eines Registerpools usw.). Die Stilllegungsschaltung 1317 und die physische(n) Registerdatei(en) 1315 sind an die Ausführungsschaltungsanordnung 1311 gekoppelt.
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben ist, sollte erkannt werden, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichende Ausführungsform des Prozessors außerdem separate Befehls- und Daten-Cache-Einheiten und eine gemeinsam benutzte L2-Cache-Einheit enthalten kann, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten enthalten, wie z. B. einen internen Cache der Ebene 1 (L1) oder mehrere Ebenen des internen Caches. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache enthalten, der sich außerhalb des Kerns und/oder des Prozessors befindet. Alternativ kann sich alles des Caches außerhalb des Kerns und/oder des Prozessors befinden.
  • Die Ausführungsschaltungsanordnung 1311 ist ein Satz aus einer oder mehreren Ausführungsschaltungen, einschließlich sowohl einer skalaren Schaltungsanordnung 1321, einer Vektor/SIMD-Schaltungsanordnung 1323 und einer Matrixoperationsschaltungsanordnung 1327 als auch einer Speicherzugriffsschaltungsanordnung 1325, um auf den Cache 1313 zuzugreifen. Die Ausführungsschaltungen führen verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) aus. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für bestimmte Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle alle Funktionen ausführen, enthalten. Die skalare Schaltungsanordnung 1321 führt skalare Operationen aus, die Vektor/SIMD-Schaltungsanordnung 1323 führt Vektor/SIMD-Operationen aus und die Matrixoperationsschaltungsanordnung 1327 führt die hier ausführlich beschriebenen Matrix- (Kachel-) Operationen aus.
  • Beispielhaft kann die beispielhafte Out-of-Order-Ausgabe-/Ausführungskernarchitektur mit Registerumbenennung eine Pipeline wie folgt implementieren: 1) eine Befehlsholschaltung führt Hol- und Längendecodierungsstufen aus; 2) die Verzweigungs- und Decodierschaltungsanordnung 1303 führt eine Decodierstufe aus; 3) die Zuweisungs-/Umbenennungsschaltungsanordnung 1307 führt eine Zuweisungsstufe und eine Umbenennungsstufe aus; 4) die Scheduler-Schaltungsanordnung 1309 führt eine Planstufe aus; 5) die physische(n) Registerdatei(en) (die an die Scheduler-Schaltungsanordnung 1309 und die Zuweisungs-/Umbenennungsschaltungsanordnung 1307 gekoppelt ist (sind) oder in der Scheduler-Schaltungsanordnung 1309 und der Zuweisungs-/Umbenennungsschaltungsanordnung 1307 enthalten ist (sind), und eine Speichereinheit führen eine Registerlese-/Speicherlesestufe aus; die Ausführungsschaltungsanordnung 1311 führt eine Ausführungsstufe aus; 6) eine Speichereinheit und die Einheit(en) der physische(n) Registerdatei(en) führen eine Rückschreib-/Speicherschreibstufe aus; 7) verschiedene Einheiten können in die Ausnahmebehandlungsstufe einbezogen sein; und 8) eine Stilllegungseinheit und die Einheit(en) der physische(n) Registerdatei(en) führen eine Einspeicherungsstufe aus.
  • Der Kern kann einen oder mehrere Befehlssätze (z. B. den x86 Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technolgies of Sunnyvale, CA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings of Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e) unterstützen. In einer Ausführungsform enthält der Kern 1390 eine Logik, um eine Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) zu unterstützen, wobei dadurch die Operationen erlaubt werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten auszuführen sind.
  • Es sollte erkannt werden, dass der Kern das Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann, wobei er es in verschiedenen Weisen, einschließlich des Zeitscheiben-Multithreading, des simultanem Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die der physische Kern das gleichzeitig Multithreading ausführt) oder einer Kombination daraus (z. B. Zeitscheiben-Holen und -Decodieren und danach simultanes Multithreading, wie z. B. in der Intel® Hyperthreading-Technik).
  • 14 veranschaulicht eine Ausführungsform einer Prozessorkern-Pipeline, die Matrixoperationen unter Verwendung von Kacheln unterstützt. Die Verzweigungsvorhersage- und Decodierschaltungsanordnung 1403 führt die Verzweigungsvorhersage von Befehlen, die Decodierung von Befehlen und/oder beides von den Befehlen aus, die im Befehlsspeicher 1401 gespeichert sind. Die hierin ausführlich beschriebenen Befehle können z. B. im Befehlsspeicher gespeichert sein. In einigen Implementierungen wird für die Verzweigungsvorhersage eine separate Schaltungsanordnung verwendet, wobei in einigen Ausführungsformen wenigstens einige Befehle in eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuersignale unter Verwendung von Mikrocode 1405 decodiert werden. Die Verzweigungsvorhersage- und Decodierschaltungsanordnung 1403 kann unter Verwendung verschiedener Mechanismen implementiert sein. Beispiele geeigneter Mechanismen enthalten, sind aber nicht eingeschränkt auf, Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Festwertspeicher (Mikrocode-ROMs) usw.
  • Die Verzweigungsvorhersage- und Decodierschaltungsanordnung 1403 ist an die Zuweisungs-/Umbenennungsschaltungsanordnung 1407 gekoppelt, die in einigen Ausführungsformen an die Scheduler-Schaltungsanordnung 1409 gekoppelt ist. In einigen Ausführungsformen stellen diese Schaltungen eine Registerumbenennung-, Registerzuweisungs- und/oder Planungsfunktionalität durch das Ausführen eines oder mehrerer des Folgenden bereit: 1) Umbenennen von logischen Operandenwerten in physische Operandenwerte (z. B. eine Register-Alias-Tabelle in einigen Ausführungsformen), 2) Zuweisen von Statusbits und -merkern dem decodierten Befehl und 3) Planen des decodierten Befehls für die Ausführung in einer Ausführungsschaltungsanordnung aus einem Befehlspool (in einigen Ausführungsformen z. B. unter Verwendung einer Reservierungsstation).
  • Die Scheduler-Schaltungsanordnung 1409 repräsentiert irgendeine Anzahl verschiedener Scheduler, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Scheduler-Einheit(en) der Scheduler-Schaltungsanordnung 1409 ist (sind) an die physische(n) Registerdatei(en) 1415 gekoppelt oder enthält (enthalten) die physische(n) Registerdatei(en) 1415. Jede der physischen Registerdatei(en) 1415 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie z. B. skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. ein Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist), Kacheln usw. In einer Ausführungsform umfasst (umfassen) die physische(n) Registerdatei(en) 1415 eine Vektorregister-Schaltungsanordnung, eine Schreibmaskenregister-Schaltungsanordnung und eine Schaltungsanordnung skalarer Register. Diese Registerschaltungen können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische(n) Registerdatei(en) 1415 ist (sind) durch eine Stilllegungsschaltung 1417 überlappt, um verschiedene Arten zu veranschaulichen, in denen die Registerumbenennung und die Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung eines (von) Umordnungspuffer(n) und einer (von) Stilllegungsregisterdatei(en); unter Verwendung einer (von) zukünftigen Datei(en), eines Historiepuffers (von Historiepuffern) und einer (von) Stilllegungsregisterdatei(en); unter Verwendung von Registerabbildungen und eines Pool von Registern; usw.). Die Stilllegungsschaltung 1417 und die physische(n) Registerdatei(en) 1415 sind an die Ausführungsschaltungsanordnung 1411 gekoppelt.
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, sollte erkannt werden, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors außerdem separate Befehls- und Daten-Cache-Einheiten und eine gemeinsame benutzte L2-Cache-Einheit enthalten kann, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten enthalten, wie z. B. einen internen Cache der Ebene 1 (L1) oder mehrere Ebenen des internen Caches. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache enthalten, der sich außerhalb des Kerns und/oder des Prozessors befindet. Alternativ kann sich alles des Caches außerhalb des Kerns und/oder des Prozessors befinden.
  • Die Ausführungsschaltungsanordnung 1411 einen Satz von einer oder mehreren Ausführungsschaltungen 1427 und einen Satz von einer oder mehreren Speicherzugriffsschaltungen 1425, um auf den Cache 1413 zuzugreifen. Die Ausführungsschaltungen 1427 führen die hier ausführlich beschriebenen Matrix- (Kachel-) Operationen aus.
  • Beispielhaft kann die beispielhafte Out-of-Order-Ausgabe-/Ausführungskernarchitektur mit Registerumbenennung eine Pipeline wie folgt implementieren: 1) eine Befehlsholschaltung führt Hol- und Längendecodierungsstufen aus; 2) die Verzweigungs- und Decodierschaltungsanordnung 1403 führt eine Decodierstufe aus; 3) die Zuweisungs-/Umbenennungsschaltungsanordnung 1407 führt eine Zuweisungsstufe und eine Umbenennungsstufe aus; 4) die Scheduler-Schaltungsanordnung 1409 führt eine Planstufe aus; 5) die physische Registerdatei(en) (die an die Scheduler-Schaltungsanordnung 1409 und die Zuweisungs-/Umbenennungsschaltungsanordnung 1407 gekoppelt sind oder in der Scheduler-Schaltungsanordnung 1409 und der Zuweisungs-/Umbenennungsschaltungsanordnung 1407 enthalten sind, und eine Speichereinheit führen eine Registerlese-/Speicherlesestufe aus; die Ausführungsschaltungsanordnung 1411 führt eine Ausführungsstufe aus; 6) eine Speichereinheit und die Einheit(en) der physische(n) Registerdatei(en) führen eine Rückschreib-/Speicherschreibstufe aus; 7) verschiedene Einheiten können in die Ausnahmebehandlungsstufe einbezogen sein; und 8) eine Stilllegungseinheit und die Einheit(en) der physische(n) Registerdatei(en) führen eine Einspeicherungsstufe aus.
  • Der Kern kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technolgies of Sunnyvale, CA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings of Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e) unterstützen. In einer Ausführungsform enthält der Kern 1490 eine Logik, um eine Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) zu unterstützen, wobei dadurch die Operationen erlaubt werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten auszuführen sind.
  • Es sollte erkannt werden, dass der Kern das Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann, wobei er es in verschiedenen Weisen, einschließlich des Zeitscheiben-Multithreading, des simultanem Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die der physische Kern das gleichzeitig Multithreading ausführt) oder einer Kombination daraus (z. B. Zeitscheiben-Holen und -Decodieren und danach simultanes Multithreading, wie z. B. in der Intel® Hyperthreading-Technik).
  • ANORDNUNG
  • Überall in dieser Beschreibung sind die Daten unter Verwendung der Zeilenhauptdaten-Anordnung ausgedrückt. Spaltenhauptanwender sollten die Begriffe entsprechend ihrer Ausrichtung übersetzen. 15 veranschaulicht ein Beispiel einer Matrix, die im Zeilenhauptformat und im Spaltenhauptformat ausgedrückt ist. Wie gezeigt, ist Matrix A eine 2 × 3-Matrix. Wenn diese Matrix im Zeilenhauptformat gespeichert ist, sind die Datenelemente einer Zeile aufeinanderfolgend. Wenn diese Matrix im Spaltenhauptformat gespeichert ist, sind die Datenelemente einer Spalte aufeinanderfolgend. Es ist eine wohlbekannte Eigenschaft der Matrizen, dass AT * BT = (BA)T, wobei ein hochgestelltes T eine Transformation bedeutet. Das Lesen von Spaltenhauptdaten als Zeilenhauptdaten führt dazu, dass die Matrix wie die Transformationsmatrix aussieht.
  • In einigen Ausführungsformen wird in der Hardware eine Zeilenhauptsemantik verwendet, wobei die Spaltenhauptdaten dazu dienen, die Operandenreihenfolge zu vertauschen, wobei das Ergebnis Transformationen der Matrix sind, wobei aber für nachfolgende Spaltenhaupt-Lesevorgänge aus dem Speicher es die richtige, nicht transformierte Matrix ist.
  • Falls z. B. zwei Spaltenhaupt-Matrizen zu multiplizieren sind: a b            g i k             ag+bhai + bjak + bl _ c d *    h j l =        cg+dhci + djck + dl  _ ef                                eg+fh ei + fj ek + fl _   ( 3 × 2 )   ( 2 × 3 )      ( 3 × 3 ) _
    Figure DE102020126212A1_0002
  • Die Eingangsmatrizen würden im linearen Speicher (Spaltenhaupt) gespeichert werden als: a c e b d f _      und  _   g h i j k l _
    Figure DE102020126212A1_0003
  • Werden diese Matrizen als Zeilenhaupt mit den Dimensionen 2 × 3 und 3 × 2 gelesen, so würden sie erscheinen als: ace   und   gh _ bdf              ij _           kl _
    Figure DE102020126212A1_0004
  • Vertauschen der Reihenfolge und Matrixmultiplikation:   g h               a c e            ag+bhcg+dheg+fh _ ij       *      bdf =                   ai + bjci + djei + fj _   kl                               ak + blck + dlek + fl _
    Figure DE102020126212A1_0005
  • Die Transformationsmatrix ist weg und kann dann in der Zeilenhauptreihenfolge gespeichert werden: ag + bh    cg + dh       eg + fh    ai + bj    ci + dj    ei + fj    ak + bl    ck + dl    ek + fl _
    Figure DE102020126212A1_0006
    wobei sie, wenn sie in den nachfolgenden Spaltenhauptberechnungen verwendet wird, die richtige nicht transformierte Matrix ist: ag + bh       ai + bj       ak + bl _ cg + dh       ci + dj       ck + dl _ eg + fh       ei + f j         ek + fl _
    Figure DE102020126212A1_0007
  • Beispielhafte Verwendung
  • 16 veranschaulicht ein Beispiel der Verwendung von Matrizen (Kacheln). In diesem Beispiel enthält die Matrix C 1601 zwei Kacheln, enthält die Matrix A 1603 eine Kachel und enthält die Matrix B 1605 zwei Kacheln. Diese Figur zeigt ein Beispiel der inneren Schleife eines Algorithmus, um eine Matrixmultiplikation zu berechnen. In diesem Beispiel werden zwei Ergebniskacheln, tmm0 und tmm 1, aus der Matrix C 1601 verwendet, um die Zwischenergebnisse zu akkumulieren. Eine Kachel aus der Matrix A 1603 (tmm2) wird zweimal wiederverwendet, da sie mit zwei Kacheln aus der Matrix B 1605 multipliziert wird. Die Zeiger, um eine neue A-Matrix (Kachel) und zwei neue B-Matrizen (Kacheln) aus den durch die Pfeile angegebenen Richtungen zu laden. Eine nicht gezeigte äußere Schleife stellt die Zeiger für die C-Kacheln ein.
  • Der beispielhafte Code, wie er gezeigt ist, enthält die Verwendung eines Kachelkonfigurationsbefehls und wird ausgeführt, um die Kachelverwendung zu konfigurieren, Kacheln zu laden, eine Schleife, um die Kacheln zu verarbeiten, die Kacheln im Speicher zu speichern und die Kachelverwendung freizugeben.
  • 17 veranschaulicht eine Ausführungsform der Verwendung von Matrizen (Kacheln). Bei 1701 wird die Kachelverwendung konfiguriert. Es wird z. B. ein TILECONFIG-Befehl ausgeführt, um die Kachelverwendung zu konfigurieren, einschließlich des Festlegens einer Anzahl von Zeilen und Spalten pro Kachel. Typischerweise wird wenigstens eine Matrix (Kachel) bei 1703 aus dem Speicher geladen. Wenigstens eine Matrix- (Kachel-) Operation wird bei 1705 unter Verwendung der Matrizen (Kacheln) ausgeführt. Bei 1707 wird wenigstens eine Matrix (Kachel) im Speicher gespeichert, wobei bei 1709 ein Kontextwechsel stattfinden kann.
  • BEISPIELHAFTE KONFIGURATION
  • KACHELKONFIGURATIONS-HARDWARE-UNTERSTÜTZUNG
  • Wie oben erörtert worden ist, muss die Verwendung von Kacheln typischerweise vor der Verwendung konfiguriert werden. Die vollständige Verwendung aller Zeilen und Spalten kann z. B. nicht erforderlich ist. Diese Zeilen und Spalten nicht zu konfigurieren, spart in einigen Ausführungsformen nicht nur Leistung, sondern die Konfiguration kann verwendet werden, um zu bestimmen, ob eine Operation einen Fehler erzeugt. Eine Matrixmultiplikation der Form (N × M) * (L × N) funktioniert normalerweise nicht, wenn M und L nicht die gleichen sind.
  • Vor dem Verwenden von Matrizen unter Verwendung von Kacheln muss in einigen Ausführungsformen die Kachelunterstützung konfiguriert werden. Wie viele Zeilen und Spalten pro Kachel, die Kacheln, die verwendet werden sollen, usw. werden z. B. konfiguriert. Ein TILECONFIG-Befehl ist eine Verbesserung für einen Computer selbst, da er Unterstützung bereitstellt, um den Computer zu konfigurieren, einen Matrixbeschleuniger (entweder als ein Teil eines Prozessorkerns oder als eine externe Vorrichtung) zu verwenden. Insbesondere bewirkt eine Ausführung des TILECONFIG-Befehls, dass eine Konfiguration aus dem Speicher wiedergewonnen und auf Matrix- (Kachel-) Einstellungen innerhalb eines Matrixbeschleunigers angewendet wird.
  • KACHELVERWENDUNGSKONFIGURA TION
  • 18 veranschaulicht die Unterstützung für die Konfiguration der Verwendung von Kacheln gemäß einer Ausführungsform. Ein Speicher 1801 enthält die Kachelbeschreibung 1803 der zu unterstützenden Matrizen (Kacheln).
  • Die Befehlsausführungsbetriebsmittel 1811 eines Prozessors/Kerns 1805 speichern die Aspekte einer Kachelbeschreibung 1803 in den Kachelkonfigurationen 1817. Die Kachelkonfigurationen 1817 enthalten eine Palettentabelle 1813, um ausführlich zu beschreiben, welche Kacheln für eine Palette konfiguriert sind (die Anzahl der Zeilen und der Spalten in jeder Kachel), und eine Markierung, dass sich ein Matrixunterstützung in Gebrauch ist. Insbesondere sind die Befehlsausführungsbetriebsmittel 1811 so konfiguriert, die Kacheln zu verwenden, wie sie durch die Kachelkonfigurationen 1817 spezifiziert sind. Die Befehlsausführungsbetriebsmittel 1811 können außerdem ein maschinenspezifisches Register oder Konfigurationsregister enthalten, um die Kachelverwendung anzugeben. Zusätzliche Werte, wie z. B. in Gebrauch und Startwerte, sind außerdem festgelegt. Die Kachelkonfigurationen 1817 verwenden die Register 1819, um die Kachelverwendungs- und Konfigurationsinformationen zu speichern.
  • 19 veranschaulicht eine Ausführungsform einer Beschreibung der zu unterstützenden Matrizen (Kacheln). Dies ist die Beschreibung, die bei der Ausführung eines STTILECFG-Befehls gespeichert werden soll. In diesem Beispiel ist jedes Feld ein Byte. Im Byte [0] ist eine Paletten-ID 1901 gespeichert. Die Paletten-ID wird verwendet, um eine Palettentabelle 1813 zu indexieren, die pro Paletten-ID eine Anzahl von Bytes in einer Kachel und die Bytes pro Zeile der Kacheln, die dieser ID zugeordnet sind, speichert, wie durch die Konfiguration definiert ist.
  • Das Byte 1 speichert einen Wert, der in einem „startRow“-Register 1903 zu speichern ist, und das Byte 2 speichert einen Wert, der in einem Register, startP 1905, zu speichern ist. Um Neustartbefehle nach diesen Ereignissen zu unterstützen, speichern die Befehle Informationen in diesen Registern. Um das erneute Starten von Befehlen nach Unterbrechungsereignissen, wie z. B. jenen, die oben ausführlich beschrieben worden sind, zu unterstützen, speichern die Befehle Informationen in diesen Registern. Der startRow-Wert gibt die Zeile an, die für den Neustart verwendet werden sollte. Der startP-Wert gibt die Position innerhalb der Zeile für Speicheroperationen an, wenn Paare verwendet werden, und gibt in einigen Ausführungsformen die tiefere Hälfte der Zeile (in der tieferen Kachel eines Paars) oder die höhere Hälfte der Zeile (in der höheren Kachel eines Paars) an. Im Allgemeinen wird die Position in der Zeile (der Spalte) nicht benötigt.
  • Mit Ausnahme von TILECONFIG und STTILECFG setzt das erfolgreiche Ausführen von Matrix- (Kachel-) Befehlen sowohl startRow als auch startP auf null.
  • Jedes Mal, wenn ein unterbrochener Matrix- (Kachel-) Befehl nicht neu gestartet wird, ist es die Verantwortung der Software, die startRow- und startP-Werte auf null zu setzen. Die Behandlungsroutinen für unmaskierte Gleitkommaausnahmen könnten z. B. entscheiden, die Operation in der Software zu beenden und den Programmzählerwert auf einen weiteren Befehl, normalerweise den nächsten Befehl, zu ändern. In diesem Fall muss die Software-Ausnahmebehandlungsroutine die startRow- und startP-Werte in der Ausnahme, die ihr durch das Betriebssystem präsentiert wird, vor dem Wiederaufnehmen des Programms auf null setzen. Das Betriebssystem lädt diese Werte anschließend unter Verwendung eines Wiederherstellungsbefehls neu.
  • Das Byte 3 speichert eine Angabe von Paaren (1b pro Kachel) von Kacheln 1907.
  • Die Bytes 16-17 speichern die Anzahl der Zeilen 1913 und Spalten 1915 für die Kachel 0, die Bytes 18-19 speichern die Anzahl der Zeilen und Spalten für die Kachel 1 usw. Mit anderen Worten, jede 2-Byte-Gruppe spezifiziert eine Anzahl von Zeilen und Spalten für eine Kachel. Falls eine Gruppe von 2 Bytes nicht verwendet wird, um die Kachelparameter zu spezifizieren, sollten sie den Wert null aufweisen. Das Spezifizieren der Kachelparameter für mehr Kacheln als die Implementierungsgrenze oder die Palettengrenze führt zu einem Fehler. Nicht konfigurierte Kacheln werden auf einen Anfangszustand mit 0 Zeilen, 0 Spalten gesetzt.
  • Schließlich endet die Konfiguration im Speicher typischerweise mit einer Endabgrenzung, wie z. B. alles Nullen für mehrere aufeinander folgende Bytes.
  • BEISPIELHAFTER KACHEL- UND KACHELKONFIGURATIONSSPEICHER
  • Die 20(A)-(D) veranschaulichen Beispiele des Registers (der Register) 1819. 20(A) veranschaulicht mehrere Register 1819. Wie gezeigt ist, weist jede Kachel (TMM0 2001 ... TMMN 2003) ein separates Register auf, wobei jedes Register eine Zeilen- und Spaltengröße für diese spezielle Kachel speichert. StartP 2011 und StartRow 2013 sind in getrennten Registern gespeichert. Ein oder mehrere Statusregister 2015 sind gesetzt (z. B. TILES_CONFIGURED = 1), um anzugeben, dass die Kacheln für die Verwendung konfiguriert sind.
  • 20(B) veranschaulicht mehrere Register 1819. Wie gezeigt, weist jede Kachel separate Register für ihre Zeilen und Spalten auf. Es sind z. B. die TMM0-Zeilenkonfiguration 2021, die TMM0-Spaltenkonfiguration 2023, StartP 2011 und StartRow 2013 in getrennten Registern gespeichert. Ein oder mehrere Statusregister 2015 sind gesetzt (z. B. TILES-CONFIGURED = 1), um anzugeben, dass die Kacheln für die Verwendung konfiguriert sind.
  • 20(C) veranschaulicht ein einzelnes Register 1819. Wie gezeigt ist, speichert dieses Register die Kachelkonfigurationen (die Zeilen und Spalten pro Kachel) 2031, wobei StartP 2011 und StartRow 2013 in einem einzigen Register als Register für gepackte Daten gespeichert sind. Ein oder mehrere Statusregister 2015 sind gesetzt (z. B. TILES_CONFIGURED = 1), um anzugeben, dass die Kacheln für die Verwendung konfiguriert sind.
  • 20(D) veranschaulicht mehrere Register 1819. Wie gezeigt ist, speichert ein einzelnes Register die Kachelkonfiguration (die Zeilen und Spalten pro Kachel) 2031. StartP und StartRow sind in getrennten Registern 2011 und 2013 gespeichert. Ein oder mehrere Statusregister 2015 sind gesetzt (z. B. TILES_CONFIGURED = 1), um anzugeben, dass die Kacheln für die Verwendung konfiguriert sind.
  • Es werden andere Kombinationen in Betracht gezogen, wie z. B. das Kombinieren der Startregister in ein einziges Register, wo sie getrennt gezeigt sind, usw.
  • PLANEN FÜR EINE SYSTOLISCHE ANORDNUNG
  • Wie oben erwähnt worden ist, ist die Hardware für die allgemeine Matrixmultiplikation (auch bekannt als GEMM) eine gute Option zum Verbessern der Spitzenberechnung (und des Energiewirkungsgrads) bestimmter Anwendungen, wie z. B. des tiefen Lernens. Der riesige Rechenbedarf von Anwendungen, die auf tiefen neuronalen Netzen (DNNs) basieren, kann zur Verwendung von Hardware (z. B. eines Beschleunigers) führen, die zahlreiche (z. B. Hunderte) Verarbeitungselemente, z. B. verschmolzene Multiplikations-Additions-Schaltungen (FMA-Schaltungen), verwendet. Die (z. B. DNN-) Beschleuniger können jedoch für ein sehr regelmäßiges Datenflussmuster von Multiplikationen dichter Matrizen optimiert sein. In bestimmten Ausführungsformen verwendet ein Beschleuniger eine Implementierung einer systolischen Anordnung, um die Leistung und den Flächen-/Leistungswirkungsgrad zu maximieren. Eine systolische Anordnung kann dichte zweidimensionale Anordnungen enthalten, die für sehr regelmäßige Datenflüsse optimiert sind.
  • Bei bestimmter Hardware veranlasst das Decodieren und Ausführen eines Befehls die Hardware der konfigurierbaren systolischen Anordnung (z. B. die Matrixoperations-Beschleunigerschaltung), C = A * B + C zu berechnen, wobei A, B und C jeweils zweidimensionale Matrizen sind, wobei die Hardware für jedes Element von C ein Skalarprodukt einer Zeile der Eingangsmatrix A mit einer Spalte der Matrix B berechnet.
  • In bestimmten Ausführungsformen nimmt eine Matrixoperations-Beschleunigerschaltung eine Matrix A (mit den Dimensionen M × K, wobei M und K ganze Zahlen sind), eine Matrix B (mit den Dimensionen K × N, wobei M und K ganze Zahlen sind) und eine Matrix C (mit der Dimension M × N, wobei M und N ganze Zahlen sind) als eine Eingabe, wobei sie dann eine Operation aus (z. B. eine verschmolzene Multiplikations-Addition) an den jeweiligen Elementen ausführt, um ein Ergebnis zu erzeugen, das in einer Matrix (z. B. zurück in der Matrix C der Dimension M × N, wobei M und N ganze Zahlen sind) gespeichert wird. In einer Ausführungsform sind M, K und N kleiner als oder gleich 16. In bestimmten Ausführungsformen führt die Matrixoperations-Beschleunigerschaltung die folgende Operation aus (z. B. an Gleitkommazahlen): a k t u a l i s i e r t e s  c i , j = c i , j + l = 0 K 1 a i , l b l , j
    Figure DE102020126212A1_0008
  • 21 veranschaulicht eine Ausführungsform eines Systems unter Verwendung eines Matrix- (Kachel-) Operationsbeschleunigers 2107 gemäß den Ausführungsformen der Offenbarung. In bestimmten Ausführungsformen überträgt ein Host-Prozessor/Verarbeitungssystem 2101 (z. B. ein Hardware-Prozessorkern, z. B. der Prozessorkern 3390 in 33B) Befehle (z. B. Matrixmanipulationsoperationen, wie z. B. arithmetische oder Matrixmanipulationsoperationen, Lade- und/oder Speicheroperationen) zu einem Matrixoperationsbeschleuniger 2107. Dies ist jedoch in dieser Weise nur zu Erörterungszwecken gezeigt. Wie hier ausführlich beschrieben ist, kann der Beschleuniger 2107 ein Teil eines Verarbeitungskerns sein. Die Befehle, die Kachelmanipulations-Operatorbefehle sind, können sich auf Kacheln als ein Register-Register- („reg-reg“-) oder Register-Speicher- („reg-mem“-) Format beziehen. Andere Befehle, wie z. B. TILESTORE, TILELOAD, TILECONFIG usw., führen in bestimmten Ausführungsformen keine Datenoperationen an einer Kachel aus. Die Befehle können decodierte Befehle (z. B. Mikrooperationen) oder Makrobefehle zum Abwickeln für den Beschleuniger 2107 sein. In einer Ausführungsform sendet ein Hardware-Prozessorkern in Reaktion auf einen Matrixoperationsbefehl, der durch den Hardware-Prozessorkern ausgeführt wird, Mikro-Ops an den Matrix- (Kachel-) Operationsbeschleuniger 2107.
  • In einer Ausführungsform sendet eine Reservierungsstations- (RS-) Schaltungsanordnung 2111 Befehle (z. B. Mikro-Ops) an den Matrixoperationsbeschleuniger 2107. In bestimmten Ausführungsformen ist der Matrixoperationsbeschleuniger 2107 eine Kachelmatrixeinheit (TMU). In bestimmten Ausführungsformen enthält der Matrixoperationsbeschleuniger 2107 eine Matrixbeschleuniger-Controller-Schaltungsanordnung 2113. In einer Ausführungsform soll der Matrixbeschleunigungs-Controller (z. B. die Schaltungsanordnung 2113) die Operationen und den Fluss der Daten in den, aus dem und/oder innerhalb des Matrixoperationsbeschleunigers 2107 steuern. Der Matrixoperationsbeschleuniger 2107 (z. B. die Matrixbeschleuniger-Controller-Schaltungsanordnung 2113) kann z. B. eine Abfertigungsschaltungsanordnung 2115 enthalten, um das Abfertigen empfangener Anforderungen (z. B. Befehle) vom Host-Prozessor/Verarbeitungssystem 2101 an eine oder mehrere Komponenten des Matrixoperationsbeschleunigers 2107 zu steuern. Ein Beispiel einer Abfertigungsschaltungsanordnung wird im Folgenden bezüglich 23 erörtert.
  • Der dargestellte Matrixoperationsbeschleuniger 2107 enthält die Datenpuffer (z. B. Register) 2105. In bestimmten Ausführungsformen sind die Datenpuffer (z. B. Register) 2105 konfigurierbar, eine entsprechende Matrix z. B. in ersten mehreren Registern (z. B. Kacheln), die eine erste zweidimensionale Matrix (z. B. eine als T0 markierte Kachel, die die Matrix A im Speicher 2105 speichert) repräsentieren, eine zweite zweidimensionale Matrix (z. B. eine als T1 markierte Kachel, die die Matrix B im Speicher 2105 speichert), eine dritte zweidimensionale Matrix (z. B. eine als T3 markierte Kachel, die die Matrix C im Speicher 2105 speichert), usw. zu speichern. Das System (z. B. der Host-Prozessor/das Verarbeitungssystem 2101) kann eine (z. B. kohärente) Speicherschnittstelle 2103 (z. B. eine Daten-Cache-Einheit) enthalten, um Daten (z. B. im Gegensatz zu Befehlen) zwischen dem Host-Prozessor/Verarbeitungssystem 2101 (z. B. als ein Out-of-Order- (OoO-) Kern) und einem Matrixoperationsbeschleuniger 2107 zu senden und zu empfangen.
  • In bestimmten Ausführungsformen verwendet der Matrixoperationsbeschleuniger 2107 ein Gitter von Verarbeitungselementen 2109 (z. B. verschmolzene Multiplikations-Additions- (FMA-) Schaltungen), um Operationen auszuführen. In einer Ausführungsform steuert die Abfertigungsschaltungsanordnung 2115 das Senden von Daten (z. B. eines oder mehrerer Werte aus einer Kachel) von den Datenpuffern 2105 (z. B. den Registern, die eine Kachel bilden) an das Gitter von Verarbeitungselementen 2109 (z. B. das Gitter der FMA-Schaltungen). In bestimmten Ausführungsformen ist das Gitter der Verarbeitungselemente 2109 ein zweidimensionales Gitter von Verarbeitungselementen, z. B. das zweidimensionale Gitter der Verarbeitungselementschaltungen 2200 in 22.
  • 22 veranschaulicht eine Ausführungsform einer Matrixoperations-Beschleunigerschaltung 2200, die ein zweidimensionales Gitter aus Verarbeitungselementschaltungen 2206-1 bis 2206-4 umfasst. In bestimmten Ausführungsformen enthält der Datenspeicher 2205 (z. B. die Registerdatei) mehrere Register, die z. B. einen entsprechenden Satz von Registern (z. B. Kachel) aufweisen, der eine erste zweidimensionale Eingangsmatrix (A), eine zweite zweidimensionale Eingangsmatrix (B) und eine dritte zweidimensionale Eingangsmatrix (C) und einen Ergebnisspeicher repräsentiert. In einer Ausführungsform wird das Ergebnis der zweidimensionalen Ausgangsmatrix z. B. durch das Überschreiben der Werte für die zweidimensionale Eingangsmatrix (C), nachdem sie durch die Matrixoperations-Beschleunigungsschaltung 2200 verwendet worden ist, in den Registern, die die dritte zweidimensionale Eingangsmatrix (C) bilden, gespeichert. Die dargestellte Matrixoperations-Beschleunigerschaltung 2200 enthält mehrere Weiterleitungs-/Pufferschaltungen 2402-1 bis 2402-4, um die Eingangswerte (z. B. von der Matrix A und der Matrix B) gemäß der auszuführenden Operation zu den Verarbeitungselementen zu leiten und in den Verarbeitungselementen zu speichern.
  • Es wird angegeben, dass die hier dargestellten Figuren nicht alle Datenkommunikationskopplungen (z. B. Verbindungen) darstellen. Ein Durchschnittsfachmann auf dem Gebiet erkennt, dass dies bestimmte Einzelheiten in den Figuren nicht verbergen soll. Es wird angegeben, dass ein zweispitziger Pfeil in den Figuren keine Zweiwegekommunikation erfordern kann, wobei er z. B. eine Einwegkommunikation (z. B. zu oder von dieser Komponente oder Vorrichtung) angeben kann. Irgendeine oder alle Kombinationen der Kommunikationswege können hier in bestimmten Ausführungsformen verwendet werden. Eine einzelne Leitung kann mehrere Pfade, z. B. mehrere Kanäle, enthalten. Die Leitung 2210 kann z. B. mehrere Pfade (z. B. „X“, wobei X irgendeine positive ganze Zahl ist), z. B. einen Pfad für einen Wert aus der Matrix A und einen Pfad für einen Wert aus der Matrix B, enthalten.
  • Auf Anforderung, eine Operation auszuführen, (z. B. durch das Decodieren und Ausführen eines Befehls, um diese Operation zu bewirken) soll die Matrixoperations-Beschleunigerschaltung 2200 in bestimmten Ausführungsformen Werte aus der Matrix A und der Matrix B an eine entsprechende Weiterleitungsschaltung senden. Die Operation kann z. B. sein, die Matrix A mit der Matrix B zu multiplizieren und dann ein jeweiliges Ergebnis zu einem entsprechenden Wert aus Matrix C zu addieren. In einer Ausführungsform soll die erste Weiterleitungsschaltung 2204-1 einen ersten Wert A[0][0] von der Matrix A[Zeile][Spalte] (den Wert vom Zeilenindex null und Spaltenindex null) empfangen und diesen Wert an jedes Verarbeitungselement 2206-1 in dieser Zeile an einen ersten Eingang jedes der Verarbeitungselemente 2206-1 rundsenden und einen Satz von Werten aus der ersten Zeile von der Matrix B empfangen und diese Werte an einen jeweiligen zweiten Eingang jedes der Verarbeitungselemente 2206-1 (z. B. so dass das Verarbeitungselement 2212 den Wert von B[0][0] empfängt, das Verarbeitungselement 2214 den Wert von B[0][1] empfängt usw.) senden. In einer Ausführungsform stellt das Verarbeitungselement 2212 an seinem Ausgang 2216 das Ergebnis der Multiplikation von A[0][0] * B[0][0] bereit, während das Verarbeitungselement 2214 an seinem Ausgang 2218 das Ergebnis der Multiplikation von A[0][0] * B[0][1] bereitstellt. Die Ausgänge (z. B. der Ausgang 2216 und 2218) werden an die Weiterleitungs-/Pufferschaltung 2 2204-2 gesendet.
  • In einer Ausführungsform soll die zweite Weiterleitungs-/Pufferschaltung 2204-2 einen zweiten Wert A[0][1] aus der Matrix A[Zeile][Spalte] (den Wert vom Zeilenindex null und Spaltenindex eins) empfangen und diesen Wert an jedes Verarbeitungselement 2206-2 in dieser Zeile an einen ersten Eingang jedes der Verarbeitungselemente 2206-2 senden, einen Satz von Werten aus der zweiten Zeile der Matrix B empfangen und diese Werte an einen entsprechenden zweiten Eingang jedes der Verarbeitungselemente 2206-1 senden (z. B. so dass das Verarbeitungselement 2222 den Wert von B[1][0] empfängt, das Verarbeitungselement 2224 den Wert von B[1][1] empfängt usw.), und eine entsprechende Ausgabe von den Ausgängen der obigen Reihe von Verarbeitungselementen 2206-1 empfangen. In einer Ausführungsform stellt das Verarbeitungselement 2222 an seinem Ausgang 2226 das zum Ausgang 2216 (A[0][0] * B[0][0]) addierte Ergebnis der Multiplikation von A[0][1] * B[1][0] bereit, während das Verarbeitungselement 2224 an seinem Ausgang 2228 das zum Ausgang 2218 (A[0][0] * B[0][1]) addierte Ergebnis der Multiplikation von A[0][1] * B[1][1] bereitstellt. In bestimmten Ausführungsformen wird diese verschmolzene Multiplikations-Additions-Operation durch jede Zeile der Verarbeitungselemente 2206-3 bis 2206-4 fortgesetzt, um von den Verarbeitungselementen 2206-4 eine Ausgabe 2230 und eine Ausgabe 2232 zu erzeugen. Es wird angegeben, dass vier eine beispielhafte Anzahl von Zeilen von Verarbeitungselementen (und z. B. von Zeilen und Spalten jeder der Matrizen A, B und C) ist, wobei es aber irgendwelche mehreren Zeilen sein können. Wenn das Ende der Zeilen von Verarbeitungselementen für die Matrixoperations-Beschleunigungsschaltung 2200 erreicht worden ist, soll die Verzerrungsadditionsschaltung 2208 ein jeweiliges Element aus der Matrix C vom Eingang 2234 (z. B. einem Satz paralleler Eingangsanschlüsse) (z. B. ein entsprechendes Element aus der ersten Zeile der Matrix C) addieren und das Ergebnis über den Ausgang 2236 (z. B. einen Satz paralleler Ausgangsanschlüsse) im jeweiligen Element der Matrix C (z. B. an einer jeweiligen Elementposition der ersten Zeile der Matrix C) speichern. Das erste Element aus der ersten Zeile der Matrix C wird z. B. zum Ergebnis vom Ausgang 2230 addiert, wobei dieses Ergebnis zurück an die Stelle des ersten Elements der ersten Zeile der Matrix C gespeichert wird, während das zweite Element aus der ersten Zeile der Matrix C zu dem Ergebnis vom Ausgang 2232 addiert wird und dieses Ergebnis zurück an die Stelle des zweiten Elements der ersten Zeile der Matrix C gespeichert wird. Dies kann für jede Zeile der Matrix A wiederholt werden, um die gesamte Multiplikation von Matrix A * Matrix B zu erzeugen (und z. B. eine Verzerrung von Matrix C in die jeweiligen Ergebnisse zu addieren).
  • Bestimmte Ausführungsformen der Schaltungsanordnung verwenden folglich eine zweidimensionale (2D) Anordnung von Verarbeitungselementen (PEs) (z. B. FMA-Einheiten), z. B. mit einigen Eingangs- und Ausgangspuffern und einer lokalen Steuerlogikschaltungsanordnung. In einer Ausführungsform erhält jedes PE einige seiner Eingaben von einem Datenspeicher, wie z. B. einer Registerdatei, und andere Eingaben von anderen PEs, wobei die letzte Zeile der PEs ihre Ausgabe zurück an den Datenspeicher sendet. Folglich bilden die PEs in diesen Ausführungsformen eine Pipeline. Ein Anwender kann im Allgemeinen beabsichtigen, eine Folge von Operationen an einer großen Menge von Datenelementen (z. B. mehr Datenelemente als PEs) auszuführen. Die Elemente können deshalb in das obere Ende der Anordnung eingegeben werden, um die Pipeline zu starten, wobei die Daten nach unten durch die Pipeline sickern gelassen werden, (wobei gegebenenfalls zusätzliche Eingaben an verschiedenen Stufen der Pipeline bereitgestellt werden).
  • In einer Ausführungsform ist jede Instanz eines Verarbeitungselements eine verschmolzene Multiplikations-Akkumulations- (FMA-) Schaltung, die eine Multipliziererschaltung (z. B. die eine erste Eingabe a, eine zweite Eingabe b nimmt und eine resultierende Ausgabe erzeugt) und eine Addierschaltung (z. B. die die resultierende Ausgabe von der Multipliziererschaltung als eine erste Eingabe und eine dritte Eingabe c addiert, um ein Ergebnis zu erzeugen) enthält. Die Steuerung des Abfertigens der Operationen und/oder Daten in ein zweidimensionales Gitter von Verarbeitungselementschaltungen (z. B. FMA-Schaltungen) kann durch die Abfertigungsschaltungsanordnung ausgeführt werden.
  • 23 veranschaulicht eine Abfertigungsschaltungsanordnung 2300 einer Matrixoperations-Beschleunigerschaltung gemäß den Ausführungsformen der Offenbarung. In einer Ausführungsform ist die Abfertigungsschaltungsanordnung 2300 ein Teil der Abfertigungsschaltungsanordnung 2115 in 21. In bestimmten Ausführungsformen soll die Abfertigungsschaltungsanordnung 2300 eine von mehreren ausstehenden Operationen (z. B. Mikrooperationen (Mikro-Ops)) mit dem Multiplexer 2302 auswählen und die ausgewählte Operation am Ausgang 2304 an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) senden. In 23 werden die ausstehenden Operationen am Eingang 2306 in eine Warteschlange 2308 empfangen. Der Eingang 2306 kann von einer Reservierungsstation (z. B. der RS-Schaltungsanordnung 2111 in 21) sein.
  • In einer Ausführungsform empfängt die Abfertigungsschaltungsanordnung Operationsanforderungen (z. B. eine für jeden Befehl oder einen Satz von Mikrooperationen für einen einzelnen Befehl) von einer Out-of-(Programm)-Order-Reservierungsstationsschaltungsanordnung, wobei sie die Operationen z. B. unter der Annahme, dass zwei aufeinanderfolgende Operationen (z. B. Befehle) in der (z. B. Pipeline der) Matrixoperations-Beschleunigungsschaltung nacheinander ohne Abhängigkeitsbeschränkungen ausgeführt werden können, der Reihe nach ausführt, wobei z. B. die Out-of-Order-Schaltungsanordnung auf die Abhängigkeit einer Matrixoperation mit A- und B-Kacheln achtet, während die Abhängigkeit zwischen aufeinanderfolgenden Matrixoperationen durch die Abfertigungswarteschlange abgewickelt wird. In einer Ausführungsform soll die RS-Schaltungsanordnung die nächste Operation (z. B. Mikrooperation (µορ)) an die Matrixoperations-Beschleunigungsschaltung abfertigen, nachdem die Abhängigkeit aufgelöst ist. Die Warteschlange 2308, wie sie dargestellt ist, enthält acht Schlitze, obwohl erkannt werden sollte, dass ein einzelner oder irgendwelche mehreren Schlitze verwendet werden können.
  • In bestimmten Ausführungsformen speichern die Einträge in der Warteschlange 2308 Informationen zum Identifizieren der verwendeten Eingangskachel(n) und/oder Ausgangskachel(n) in den Datenpuffern (z. B. den Datenpuffern 2105 oder den Datenpuffern 2205) und/oder der durch das Gitter (z. B. das FMA-Gitter 2109 in 21) auszuführenden Operationen. In einer Ausführungsform speichert jeder Eintrag in der Warteschlange 2308 einen Wert (oder einen Indikator für diesen Wert) eines gültigen Bits (v), einen Operations-Opcode (z. B. µορ), die Dimensionen der Kacheln (z. B. M, K, N), die Steuerungen (z. B. Null-Steuerungen), den Kachel-ID-Wert (z. B. einen Wert für die Position jeder der A-Kachel, der B-Kachel und der C-Kachel in den Datenpuffern). Der Hauptkopf kann ein Zeiger auf den Beginn der aktuellen Operation (z. B. der ersten Mikrooperation von mehreren Mikrooperationen eines einzelnen Befehls) sein, die zu der Matrixoperations-Beschleunigungsschaltung abgefertigt wird. Das Hauptende kann ein Zeiger auf das Ende der aktuellen Operation (z. B. der letzten Mikrooperation von mehreren Mikrooperationen dieses einzelnen Befehls) sein, der zu der Matrixoperations-Beschleunigerschaltung abgefertigt wird. Das gültige Bit (v) kann verwendet werden, um eine Operation (z. B. Mikrooperation) als abgeschlossen zu markieren, z. B. wenn die angeforderte Operation für diese Operation durch die Matrixoperations-Beschleunigerschaltung abgeschlossen ist.
  • In bestimmten Ausführungsformen ist die Planungsschaltungsanordnung 2310 enthalten, um eine Operation (z. B. einen Kopf von mehreren Mikrooperationen) auszuwählen, die an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) zu senden ist, z. B. um die Operationen für diese ausgewählte Operation zu beginnen.
  • 24 veranschaulicht eine Planungsschaltungsanordnung 2400 der Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung gemäß den Ausführungsformen der Offenbarung. Wie oben angegeben worden ist, kann eine Operation (z. B. Mikrooperationen) Aktualisierte CM×N = CM×N + AM × K × BK×N sein. Die Planungsschaltungsanordnung kann auf ein Maximum von: M (z. B. die Anzahl der Zyklen, in denen die Puffer (z. B. der Puffer 2105 in 21 oder der Puffer 2205 in 22) der ersten Anordnung (z. B. der ersten Zeile (z. B. der ersten Zeile der PEs 2212, 2214, ... 2206-1 in 22) oder der ersten Spalte) belegt sind (wobei z. B. ein Bus verwendet wird, um die A-Kachel in die Matrixoperations-Beschleunigerschaltung zu übertragen), K (z. B. die Anzahl der Zyklen, in denen die Betriebsmittel (z. B. ein Bus), die die B-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind) und einer vorgewählten Mindestlücke (z. B. 4 Zyklen) zwischen den Abfertigungen warten. In 24 wird der Ausgang 2402 aktiviert (z. B. als ein Wert von eins anstelle von null), um das Abfertigen einer nächsten Operation (z. B. Mikrooperation) zu der Matrixoperations-Beschleunigerschaltung zu bewirken. In bestimmten Ausführungsformen enthält die Planungsschaltungsanordnung 2400 einen K-Zähler 2404, um während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die B-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, einen Wert von eins für K und dann eine Null, wenn es abgeschlossen (z. B. ein vorgegebener Wert für den Zähler K) ist, zu aktivieren, einen M-Zähler 2406, um während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die A-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, einen Wert von eins für M und dann eine Null, wenn es abgeschlossen (z. B. vorgegebener Wert für den Zähler M) ist, zu aktivieren, und einen Zähler 2408 der Mindestzyklen (z. B. vier Zyklen als ein Beispiel, wobei aber irgendein einziger oder mehrere Zyklen ausgewählt werden können), um die Mindestzyklen zwischen dem Abfertigen der Operationen (z. B. Mikrooperationen) am Ausgang 2402 (z. B. ein Abfertigen ist eine am Ausgang 2402 aktivierte Eins) herunterzuzählen, um einen Wert von eins während des Herunterzählens der Mindestanzahl von Zyklen und dann eine Null, wenn es abgeschlossen ist, zu aktivieren. In einer Ausführungsform soll das ODER-Logikgatter 2412 eine Eins aktivieren, wenn irgendeiner seiner Eingänge eins ist, und soll das NICHT-Logikgatter 2414 den Ausgang des ODER-Logikgatters 2412 invertieren. Sobald jeder Zähler bis zu seinem Auslöseschwellwert (z. B. null) herunterzählt, bewirkt er als ein Beispiel auf seiner jeweiligen Leitung zum ODER-Logikgatter 2412 eine Aktivierung einer Null (z. B. bis eine Abfertigung für 2402 stattfindet), wobei folglich das NICHT-Logikgatter 2414 eine Eins ausgibt, wenn alle Zähler 2404, 2406 und 2408 eine Null aktivieren. Nach jeder Abfertigung kann der (können die) Zähler auf seinen (ihren) ursprünglichen Wert (z. B. nicht null) rückgesetzt werden.
  • Optional kann eine Aufhebungs-Abfertigungssteuerung 2410 verwendet werden, z. B. um eine Null in einer Betriebsart zu aktivieren, die die Abfertigung einer Operation nicht aufhebt, und um eine Eins in einer Betriebsart zu aktivieren, die die Abfertigung einer Operation aufhebt (und folglich eine Ausgabe einer Null vom Ausgang 2402 bewirkt).
  • In einer Ausführungsform ist ein Auslöser zum Auswählen einer nächsten Operation (z. B. Mikrooperation) zur Ausführung durch die Matrixoperations-Beschleunigerschaltung (z. B. die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22)) durch MAX{4, M, K} gegeben, wobei M die Anzahl der Zeilen der A-Matrix ist und K die Anzahl der Spalten der A-Matrix (oder der Zeilen der B-Matrix) ist und 4 eine untere Schranke für die Anzahl der Zyklen für eine (z. B. Mikrooperations-) Ausführung ist. Es wird angegeben, dass in bestimmten Ausführungsformen die Planungsschaltungsanordnung wenigstens K Zyklen warten soll (z. B. wenn es nur einen einzigen Bus gibt, damit die B-Kachel in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22)) geladen wird, (um z. B. ein Holen nur einer einzigen B-Zeile pro Zyklus zu ermöglichen). In bestimmten dieser Ausführungsformen legt K die Anzahl der Akkumulationen fest, die die Anzahl der Zeilen der B-Matrix ist, wobei folglich der B-Bus für die nächsten K-Zyklen belegt ist, wobei während dieser Zeit keine neue Mikrooperation abgefertigt werden kann. In bestimmten dieser Ausführungsformen legt M die Anzahl der Zyklen fest, in denen die Zeilen der A-Matrix den A-Bus benutzen, so dass z. B. die nächste Mikrooperation nur abgefertigt werden kann, nachdem sowohl der M-Zähler als auch der K-Zähler gelöscht sind. Zusätzlich kann eine Mindestanzahl von (z. B. 4) Zyklen zwischen aufeinanderfolgenden Abfertigungen, z. B. wo die C-Matrix im Zyklus 1 gelesen, im Zyklus 2 mit dem Multiplikationsergebnis (z. B. A × B) akkumuliert und im Zyklus 3 abermals in die Datenpuffer zurückgeschrieben werden sollte, und ein weiterer Zyklus, bevor sie im Zyklus 4 abermals gelesen werden können, erwünscht sein. Dies setzt voraus, dass sich die Schritte im Obigen in einem einzigen Zyklus befinden. In anderen Ausführungsformen kann jeder der Schritte mehr als einen Zyklus brauchen.
  • In bestimmten Ausführungsformen soll die Planungsschaltungsanordnung 2400 ein gültiges Bit in der entsprechenden Warteschlange (z. B. der Warteschlange 2308 in 23) löschen, wenn eine Operation (z. B. Mikrooperation) ausgewählt und/oder an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) zur Ausführung abgefertigt wird, und/oder ihren Kopfzeiger in der entsprechenden Warteschlange (z. B. der Warteschlange 2308 in 23) aktualisieren (z. B. um die nächste Operation für die Auswahlentscheidung verfügbar zu machen).
  • 25 veranschaulicht eine Planungsschaltungsanordnung 2500 einer Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung, die von einer Basisplanungsbetriebsart in eine Planungsbetriebsart umschaltbar ist, die eine Eingangsmatrix wiederverwendet, gemäß den Ausführungsformen der Offenbarung. Die Eingangsmatrix in diesen Ausführungsformen bezieht sich auf eine Eingangs-„B“-Matrix (z. B. Kachel), wobei dies aber lediglich veranschaulichend ist und andere Matrizen (z. B. Kacheln) ähnlich planen können.
  • Die Planungsschaltungsanordnung 2500 enthält einen Eingang 2502, um einen Wert zu empfangen, der die nächste Operation (z. B. Mikrooperation), die in der Matrixoperations-Beschleunigerschaltung ausgeführt werden soll, und insbesondere die nächste Operation, die ausgewählt und/oder zu der Operationsschaltungsanordnung (z. B. dem FMA-Gitter 2109 in 21 oder den PE-Schaltungen in 22) zur Ausführung abgefertigt wird, identifiziert. In einer Ausführungsform empfängt der Eingang 2502 den Ausgang 2304 aus 23.
  • In bestimmten Ausführungsformen identifiziert der Eingang 2502 eine nächste Operation (und z. B. die entsprechenden Eingangs-/Ausgangskacheln), die durch die Planungsschaltungsanordnung 2500 abzufertigen ist. In bestimmten dieser Ausführungsformen enthält die Eingabe 2502 einen Identifikations- (ID-) Wert, der eine Kachel (z. B. einen Satz von Registern, der eine Kachel in den Datenpuffern (z. B. Registern) 2105 in 21 bildet) repräsentiert. Die Planungsschaltungsanordnung 2500 enthält einen Speicher 2504, der eine aktuelle Kachel(n) identifiziert, die durch die Matrixoperations-Beschleunigerschaltung verarbeitet wird (werden), und kann insbesondere die aktuelle(n) Kachel(n) identifizieren, die ihre Daten in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen aufweisen (oder deren Daten in die/aus der Operationsschaltungsanordnung (z. B. das/dem FMA-Gitter 2109 in 21 oder die/den Pufferschaltungen in 22) geladen werden). In einer Ausführungsform enthält die Planungsschaltungsanordnung 2500 einen Speicher 2506 gültiger Kacheln (z. B. der Kachel B), um anzugeben, ob der Identifikationswert im Speicher 2504 ein gültiger Wert oder ein ungültiger Wert ist (die Hardware z. B. eine weitere Kachel und folglich einen weiteren Identifikationswert lädt).
  • Die Planungsschaltungsanordnung 2500 enthält eine Vergleichsschaltung 2508, um (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, mit (ii) der nächsten Kachel (z. B. der nächsten Kachel B), die in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen werden soll, zu vergleichen. In einer Ausführungsform wird dieser Vergleich durch das Vergleichen des durch die Planungsschaltungsanordnung für jede Kachel bereitgestellten Identifikationswertes z. B. mit dem Identifikationswert, der bei der Eingabe der Kachel in die Datenpuffer (z. B. die Datenpuffer 2105 in 21) eines Matrixoperationsbeschleunigers bereitgestellt wird, wobei der Identifikationswert z. B. jeder Kachel bereitgestellt wird, bevor die Werte für die Kachel in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) eingegeben werden.
  • In bestimmten Ausführungsformen soll die Vergleichsschaltung 2508 (i) die Eingangskachel (z. B. ihren ID-Wert in den Datenpuffern 2105 in 21) (z. B. „neue Kachel B“) vom Eingang 2502 für eine nächste Operation mit (ii) der aktuellen Kachel (z. B. der Kachel B), die gegenwärtig in die Operationsschaltungsanordnung geladen ist (z. B. gegenwärtig in das FMA-Gitter 2109 in 21 oder in die Pufferschaltung(en) in 22 geladen ist), z. B. dem ID-Wert für die Datenpuffer 2105 in 21 für eine Kachel, die gegenwärtig in das FMA-Gitter 2109 in 21 geladen ist, vergleichen. In einer Ausführungsform soll die Vergleichsschaltung 2508 den ID-Wert der aktuell benutzten Kachel mit dem ID-Wert der nächsten Kachel vergleichen, die in der Operationsschaltungsanordnung zu verwenden ist, und, falls sie gleich sind, einen Wert (z. B. eins), dass sie gleich sind, aktivieren. In einer Ausführungsform soll die Vergleichsschaltung 2508 den ID-Wert der aktuell benutzten Kachel aus dem Speicher 2504 mit dem ID-Wert der nächsten Kachel vergleichen, die in der Operationsschaltungsanordnung zu verwenden ist, und, falls sie gleich sind, z. B. einen Wert (z. B. eins), dass sie gleich sind, aktivieren, wenn der Speicher 2506 außerdem angibt, dass der Identifikationswert im Speicher 2504 ein gültiger Wert ist, und andernfalls einen anderen Wert (z. B. null) aktivieren.
  • In bestimmten Ausführungsformen wird, wenn (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, gleich (ii) der nächsten Kachel (z. B. der nächsten Kachel B), die in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen werden soll, ist, der Wert der gleichen Kachel (z. B. der gleichen Kachel B) (z. B. eine Eins) aktiviert, um (z. B. über den Ausgang 2510) das Wechseln in eine Planungsbetriebsart zu verursachen, die die Eingangsmatrix wiederverwendet, z. B. die Kachel B wiederverwendet, die bereits innerhalb der Operationsschaltungsanordnung (z. B. im FMA-Gitter 2109 in 21 oder in der (den) Pufferschaltung(en) in 22) gespeichert ist, z. B. ohne sie aus den Datenpuffern (z. B. den Datenpuffern 2105 in 21) getrennt von der Operationsschaltungsanordnung neu zu laden.
  • In bestimmten Ausführungsformen soll die Vergleichsschaltung 2508 einen ersten Wert (z. B. eins) am Ausgang 2510 ausgeben, wenn (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, gleich (ii) der nächsten Kachel (z. B. der nächsten Kachel B) ist, die in die Operationsschaltungsanordnung geladen werden soll. Die Ausgabe 2510 kann dann in das NICHT-Logikgatter 2512 und diese Ausgabe und die Ausgabe vom K-Zähler 2516 in das UND-Logikgatter 2514 (das z. B. eine Ausgang von eins aufweist, nur wenn alle Eingänge eine Eins sind) und in das ODER-Logikgatter 2522 eingegeben werden.
  • In bestimmten Ausführungsformen enthält die Planungsschaltungsanordnung 2500 einen K-Zähler 2516, um einen Wert von eins für K während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die B-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, und dann eine Null, wenn es abgeschlossen (z. B. ein vorgegebener Wert für den Zähler K) ist, zu aktivieren, einen M-Zähler 2518, um einen Wert von eins für M während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die Kachel A in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, und dann eine Null, wenn es abgeschlossen (z. B. vorgegebener Wert für den Zähler M) ist, zu aktivieren, und einen Zähler 2520 der Mindestzyklen (z. B. vier Zyklen als ein Beispiel, wobei es aber irgendein einzelner oder mehrere Zyklen ausgewählt werden können), um die Mindestzyklen zwischen dem Abfertigen von Operationen (z. B. Mikro-Operationen) am Ausgang 2526 (ein Abfertigen ist z. B. eine Eins, die am Ausgang 2526 aktiviert ist) herunterzuzählen, um einen Wert von eins, während des Herunterzählens der Mindestanzahl von Zyklen, und dann eine Null, wenn es abgeschlossen ist, zu aktivieren. In einer Ausführungsform soll das ODER-Logikgatter 2522 ein Eins aktivieren, wenn irgendeiner seiner Eingänge eins ist, wobei das NICHT-Logikgatter 2524 den Ausgang des ODER-Logikgatters 2522 invertieren soll. Als ein Beispiel verursacht es, sobald jeder Zähler bis zu seinem Auslöseschwellwert (z. B. null) herunterzählt und (folglich das UND-Logikgatter 2514 eine Null ausgibt, wenn der K-Zähler 2516 eine Null aktiviert), eine Aktivierung einer Null auf seiner entsprechenden Leitung zum ODER-Logikgatter 2522 (z. B. bis eine Abfertigung für 2526 stattfindet), wobei folglich das NICHT-Logikgatter 2514 eine Eins ausgibt, (i) wenn alle Zähler 2516, 2518 und 2520 eine Null aktivieren oder (ii) falls der Ausgang 2510 eine Eins für eine Übereinstimmung zusammen mit den Zählern 2518 und 2520, die eine Null aktivieren, ist. Nach jeder Abfertigung kann der (können die) Zähler auf ihren ursprünglichen (z. B. von null verschiedenen) Wert rückgesetzt werden (wie er z. B. durch die Dimensionen der A- und B-Kacheln festgelegt ist). Wenn in einer Ausführungsform der K-Zähler 2516, der M-Zähler 2518 und der Zähler 2520 der Mindestzyklen auf ihren jeweiligen Leitungen zum ODER-Logikgatter 2528 eine Null aktivieren, gibt es eine Null an das NICHT-Logikgatter 2530 aus, das dann eine Eins (anstelle einer Null andernfalls) als ein Rücksetzen ausgibt, um den Speicher 2506 der gültigen Kachel (z. B. der Kachel B) zu veranlassen, den Identifikationswert im Speicher 2504 als einen ungültigen Wert anzugeben, (die Hardware z. B. eine weitere Kachel in die Operationsschaltungsanordnung lädt).
  • Optional kann eine Aufhebungs-Abfertigungssteuerung 2532 verwendet werden, um z. B. eine Null in einer Betriebsart zu aktivieren, die die Abfertigung einer Operation nicht aufhebt, und eine Eins in einer Betriebsart zu aktivieren, die die Abfertigung einer Operation aufhebt (und folglich eine Ausgabe einer Null von Ausgang 2526 zu verursachen).
  • Wie oben angeben worden ist, kann die Planungsschaltung zwischen (i) einer ersten (z. B. durchsatzeffizienten) Planungsbetriebsart, die die Eingangsmatrix wiederverwendet, z. B. eine bereits in der Operationsschaltungsanordnung (z. B. in dem FMA-Gitter 2109 in 21 oder in der (den) Pufferschaltung(en) in 22) gespeicherte Kachel wiederverwendet, z. B. ohne sie erneut aus den Datenpuffern (z. B. den Datenpuffern 2105 in 21), die von der Operationsschaltungsanordnung getrennt sind, zu laden, und (ii) einer zweiten Planungsbetriebsart, die eine bereits innerhalb der Operationsschaltungsanordnung gespeicherte Kachel nicht wiederverwendet, wählen.
  • In einer Ausführungsform ist ein Auslöser zum Auswählen einer nächsten Operation (z. B. Mikrooperation) zur Ausführung durch die Matrixoperations-Beschleunigerschaltung (z. B. die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22)) in (i) der ersten (z. B. durchsatzeffizienter) Planungsbetriebsart durch MAX{4, M} gegeben und (ii) in der zweiten Planungsbetriebsart durch MAX{4, M, K} gegeben, wobei M die Anzahl der Zeilen der A-Matrix ist und K die Anzahl der Spalten der A-Matrix ist und 4 eine untere Schranke für die Anzahl der Zyklen für eine (z. B. Mikrooperations-) Ausführung ist. Es wird angegeben, dass in bestimmten Ausführungsformen die Planungsschaltungsanordnung wenigstens K Zyklen warten soll (z. B. wenn es nur einen einzigen Bus für die B-Kachel gibt, um in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22)) geladen zu werden, (um z. B. ein Holen von nur einer einzigen B-Zeile pro Zyklus zu ermöglichen). In bestimmten dieser Ausführungsformen legt K die Anzahl der Akkumulationen fest, die die Anzahl der Zeilen der B-Matrix ist, wobei folglich der B-Bus für die nächsten K-Zyklen belegt ist, wobei während dieser Zeit keine neue Mikrooperation abgefertigt werden kann. In bestimmten dieser Ausführungsformen legt M die Anzahl der Zyklen fest, in denen die Zeilen der A-Matrix den A-Bus benutzen, z. B. so dass die nächste Mikrooperation nur abgefertigt werden kann, nachdem sowohl der M-Zähler als auch der K-Zähler gelöscht sind. Zusätzlich kann eine Mindestanzahl von (z. B. 4) Zyklen zwischen aufeinanderfolgenden Abfertigungen, z. B. wo die C-Matrix im Zyklus 1 gelesen, im Zyklus 2 mit dem Multiplikationsergebnis (z. B. A × B) akkumuliert und im Zyklus 3 abermals in die Datenpuffer zurückgeschrieben werden sollte, und ein weiterer Zyklus, bevor sie im Zyklus 4 abermals gelesen werden kann, erwünscht sein. Dies setzt voraus, dass sich die Schritte im Obigen in einem einzigen Zyklus befinden. In anderen Ausführungsformen können die Schritte mehr als einen Zyklus jede s dauern. In bestimmten Ausführungsformen ist die Kachel B die B-Matrix in AM×K × BK×N. Das Planen z. B. gemäß falls(TMULnext.B = TMULTMM.B), dann warte Maximum von (M oder Mindestzyklen), sonst warte Maximum von (M, K oder Mindestzyklen).
  • In bestimmten Ausführungsformen kann beim Ausführen einer Matrixoperation an M, K, N die Übertragung der B-Matrix für K (z. B. bis zu 16) Zyklen (z. B. den B-Übertragungszeitraum) erfolgen, wobei während des B-Übertragungszeitraums die nächste Operation (z. B. TMULnext(M, K, N)), die die gleiche B-Matrix verwendet, die Ausführung starten kann, wenn ihr A-Puffer frei ist. Wenn z. B. der B-Übertragungszeitraum von M, K, N endet, kehrt die Operation zu normal zurück, wobei die B-Matrix gelesen wird und von Datenpuffern (z. B. den Datenpuffern 2105 in 21) (z. B. dem Kachel-Matrix-Puffer (TMB)) zur Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder in die Pufferschaltung(en) in 22) (z. B. den Kachel-Matrix-Multiplizierer (TMM)) übertragen wird. In einer Ausführungsform, in der die Verwendung kontinuierlich ist, verhindert die Schaltungsanordnung (z. B. die Planungsschaltungsanordnung) (z. B. mit den Operationen von einer OoO-RS-Schaltung) die Rückgewinnung und Neuzuweisung des Puffers (z. B. des B-Puffers), wobei z. B. kein Speichern im Cache erforderlich ist. Folglich wird ein Computer, der die erste (z. B. durchsatzeffiziente) Planungsbetriebsart verwendet, verbessert, indem er nicht nur die Fähigkeit aufweist, eine Operation früher abzufertigen, sondern die Leistungsaufnahme verringert wird, wenn ein Lesen (z. B. über einen B-Bus) der Daten aus den Datenpuffern (z. B. dem Datenpuffer 2105 in 21) eliminiert wird.
  • Wenn in bestimmten Ausführungsformen die Daten aus den Datenpuffern (z. B. den Datenpuffern 2105 in 21) in der Operationsschaltungsanordnung (z. B. in dem FMA-Gitter 2109 in 21 oder in den Pufferschaltungen in 22) gespeichert sind, können die Datenpuffer zurückgewonnen werden, z. B. aus der Verwendung freigegeben und dann neu zugewiesen werden, um eine Matrix (z. B. eine neue Kachel B) für eine andere Operation (z. B. einen anderen Befehl) zu speichern. Wenn in einer ersten (z. B. durchsatzeffizienten) Planungsbetriebsart, die die Eingangsmatrix wiederverwendet, z. B. eine Kachel, die bereits innerhalb der Operationsschaltungsanordnung (z. B. im FMA-Gitter 2109 in 21 oder in der (den) Pufferschaltung(en) in 22) gespeichert ist, wird in bestimmten Ausführungsformen die Rückgewinnung der
  • Wenn in einer ersten (z. B. durchsatzeffizienten) Planungsbetriebsart, die die Eingangsmatrix wiederverwendet, soll in einer Ausführungsform die Planungsschaltungsanordnung die Rückgewinnung des Puffers (z. B. des Puffers für die Matrix B in der Operationsschaltungsanordnung) zwischen der Ausführung der vorherigen Operation (z. B. eines einzelnen Befehls) und der nächsten Operation (z. B. eines einzelnen Befehls) verhindern, und/oder, wenn in einer zweiten Planungsbetriebsart, die die Eingangsmatrix nicht wiederverwendet, soll die Planungsschaltungsanordnung die Rückgewinnung des Puffers (z. B. des Puffers für die Matrix B in der Operationsschaltungsanordnung) zwischen der Ausführung der vorhergehenden Operation (z. B. eines einzelnen Befehls) und der nächsten Operation (z. B. eines einzelnen Befehls) ermöglichen. In einer Ausführungsform, wenn in der zweiten Planungsbetriebsart, die die Eingangsmatrix nicht wiederverwendet, beginnt die Planungsschaltungsanordnung die Rückgewinnung des Puffers (z. B. des Puffers für Matrix B in der Operationsschaltungsanordnung) zwischen der Ausführung der vorhergehenden Operation (z. B. des vorhergehenden Befehls) und der nächsten Operation (z. B. des nächsten Befehls). Eine Matrixoperations-Beschleunigerschaltung (z. B. eine Controller-Schaltungsanordnung) kann jedem von mehreren Registern einen Identifikationswert zuweisen, die eine zweidimensionale Eingangsmatrix repräsentieren, wobei die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters der verschmolzenen Multiplikations-Akkumulation-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für die entsprechenden zweidimensionalen Eingangsmatrizen aus der vorhergehenden Operation (z. B. dem vorhergehenden Befehl) und der nächsten Operation (z. B. dem nächsten Befehl) umfassen kann. Die Matrixoperations-Beschleunigerschaltung (z. B. Controller-Schaltungsanordnung) kann einer Matrix, die den gleichen Wert hat, einen gleichen ID-Wert zuweisen. Die Matrixoperations-Beschleunigungsschaltung (z. B. eine Controller-Schaltungsanordnung) kann für Matrizen, die unterschiedliche Werte haben, unterschiedliche ID-Werte zuweisen. Eine erste Operation (z. B. ein erster Befehl) kann z. B. einen ersten Wert aufweisen, der einer zweidimensionalen Eingangsmatrix zugewiesen ist, eine zweite Operation (z. B. ein zweiter Befehl) kann einen gleichen Wert zugewiesen aufweisen, wenn es die gleiche zweidimensionale Eingangsmatrix ist, und einen anderen Wert zugewiesen aufweisen, wenn es eine andere zweidimensionale Eingangsmatrix als in der ersten Operation ist.
  • In bestimmten Ausführungsformen soll die Planungsschaltungsanordnung 2500 ein gültiges Bit in der entsprechenden Warteschlange (z. B. der Warteschlange 2308 in 23) löschen, wenn eine Operation (z. B. Mikrooperation) ausgewählt und/oder zu der Operationsschaltungsanordnung (z. B. dem FMA-Gitter 2109 in 21 oder den PE-Schaltungen in 22) zur Ausführung abgefertigt wird, und/oder ihren Kopfzeiger in der entsprechenden Warteschlange (z. B. der Warteschlange 2308 in 23) aktualisieren (z. B. um die nächste Operation für die Auswahlentscheidung verfügbar zu machen). In einer Ausführungsform ist die Wiederverwendung der B-Puffer-Daten nur erlaubt, falls die Operation, die die B-Werte in den B-Puffer lädt, immer noch ausgeführt wird, wenn die „mögliche Wiederverwendung“, die zweite Operation ankommt, wobei dann diese zweite Operation auf Kontinuität mit der ersten Operation überprüft wird, so dass die zweite Operation den zurückgewonnenen Wert nur verwendet, wenn die Kontinuität mit der ersten Operation festgestellt wird, falls z. B. die erste Operation unter Verwendung der wiederzuverwendenden B-Werte nicht vollständig ist, kann ihr B-Puffer nicht zurückgewonnen werden und kann deshalb durch die zweite Operation verwendet werden (z. B. solange wie es eine Kontinuität gibt).
  • In bestimmten Ausführungsformen wird eine erste (z. B. durchsatzeffiziente) Planungsbetriebsart, der die Eingangsmatrix wiederverwendet, verwendet, um die Leistung einer (z. B. Gleitkomma-) FP-Matrixoperations-Beschleunigungsschaltung zu beschleunigen. Es sollte erkannt werden, dass das hier offenbarte Planen nicht auf den Entwurf von Matrixoperations-Beschleunigerschaltungen eingeschränkt ist, sondern auf andere Mikroarchitekturen mit unterschiedlicher Latenzzeit mit übernommenen Einschränkungen ausgedehnt werden kann. Überdies kann es auf den Fall ausgedehnt werden, in dem eine FMA-Schaltung eine 1-Zyklus-Latenzzeit annimmt.
  • In bestimmten Ausführungsformen kann eine Matrix eine Dimension aufweisen, die größer als die verfügbare Hardware (z. B. die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22)) ist. Bestimmte Ausführungsformen verwenden hier mehrere (z. B. drei) Zähler zum Planen (z. B. das Abfertigen der Operationen (z. B. Mikrooperationen)), nämlich Kgeradzahlig, Kungeradzahlig und Mc, die die Einheitsbeschränkungen abwickeln, und einen Mechanismus zum Prüfen der Wiederverwendung der BK × N-Matrix. Weiterhin implementieren hier bestimmte Ausführungsformen eine sekundäre Warteschlange zum Abwickeln von Operationen (z. B. Mikro-Ops) in einem Fall, in dem eine Dimension (z. B. K) größer ist als die verfügbare Hardware (z. B. K > 8) ist, z. B. wenn diese Operationen (z. B. Mikro-Ops) mit hoher Priorität für eine zweite Runde in der Operationsschaltungsanordnung (z. B. im FMA-Gitter 2109 in 21 oder in den PE-Schaltungen in 22) abgefertigt werden.
  • In einer Ausführungsform behält die Planungsschaltung eine erste Zeile B0 ∈ BK × N während M Zyklen bei und sendet jedes der M Elemente der ersten Spalte der Matrix AM X K in einem anderen Zyklus. Nach einem Zyklus oder einer Anzahl von Zyklen (z. B. 2 Zyklen) wird die nächste FMA-Anordnung (z. B. Zeile oder Spalte) eines FMA-Gitters während M Zyklen belegt, die in bestimmten Ausführungsformen die zweite Teil-FMA-Operation berechnet. Diese sequentielle Pipelinebetriebsart wird in bestimmten Ausführungsformen ausgeführt, bis K Teil-FMA-Operationen durch K FMA-Anordnungen berechnet worden sind. In einer Ausführungsform ist die FMA-Gitterverwendung durch drei Hauptbeschränkungen eingeschränkt, nämlich (1) die Anzahl der Zeilen im Ziel, (2) die B-Bus-Bandbreite (z. B. 512 Bits pro Zyklus) und (3) die Anzahl der FMA-Anordnungen (z. B. Zeilen oder Spalten). Als ein Beispiel für (1) im Fall von M < ein gegebener Wert (z. B. 16) ist es möglich, die nächste Operation (z. B. Mikrooperation) nach M Zyklen zur Ausführung zu senden, weil die erste FMA0-Anordnung nach M Zyklen verfügbar und frei ist. Im Fall von M = 12 wird z. B. die erste FMA0 während der ersten 12 Zyklen verwendet. Das erste Ergebnis der Ziel-WB wird jedoch durch 16 Zyklen berechnet. Dies bedeutet, dass die nächste Operation (z. B. Mikrooperation) abgefertigt werden kann, bevor die erste Operation (z. B. Mikrooperation) in diesem Beispiel abgeschlossen ist. Als ein Beispiel für (2) ist das FMA-Gitter eingeschränkt, eine einzige Zeile der BK × N-Matrix in einem Zyklus zu empfangen. In einer Ausführungsform weisen die Addierer der FMA-Schaltungen eine Latenzzeit einer gegebenen Anzahl von (z. B. zwei) Zyklen auf, was bedeutet, dass es erforderlich ist, einmal alle zwei Zyklen bis zu einem Schwellenwert (z. B. 512 Bits) des B-Busses zu senden. Folglich führen bestimmte Ausführungsformen zwei Operationen (z. B. Mikrooperationen) gleichzeitig aus und halten den B-Bus in jedem Zyklus belegt. Weiterhin halten bestimmte Ausführungsformen die Zeile der BK × N-Matrix in einem Puffer zur Wiederverwendung durch aufeinanderfolgende Befehle. Als ein Beispiel für (3) unterstützt die FMA-Gitter-Architektur bis zu einer gegebenen Anzahl (z. B. 16) von Teilproduktadditionen (z. B. K _< 16), während das FMA-Gitter weniger als die gegebene Anzahl (z. B. 8) FMA-Anordnungen (z. B. Zeilen oder Spalten) enthält. Im Fall K ≤ 8 ist das Ergebnis nach 16 Zyklen fertig, während im Fall K > 8 eine alternative Lösung erforderlich ist.
  • 26 veranschaulicht eine Abfertigungsschaltungsanordnung 2600 einer Matrixoperations-Beschleunigerschaltung für mehrere Durchläufe gemäß den Ausführungsformen der Offenbarung. Die Abfertigungsschaltungsanordnung 2600 enthält zwei Warteschlangen, nämlich die Hauptwarteschlange 2610 und die Warteschlange 2612 des zweiten Durchlaufs. In einer Ausführungsform enthält die Hauptwarteschlange 2610 die signifikanten Informationen zum Ausführen der Operation in der Operationsschaltungsanordnung (z. B. im FMA-Gitter 2109 in 21 oder in den PE-Schaltungen in 22) aufrecht.
  • In einer Ausführungsform hält die Warteschlange 2612 des zweiten Durchlaufs die Operation (z. B. Mikrooperationen) aufrecht, die für einen zweiten Durchlauf in der Operationsschaltungsanordnung (z. B. im FMA-Gitter 2109 in 21 oder in den PE-Schaltungen in 22) geeignet sind, (z. B. deren K > 8), obige Abwicklung (3). In einer Ausführungsform wird jede Operation (z. B. Mikrooperation), die in die Warteschlange 2612 des zweiten Durchlaufs eingefügt wird, für 16 Zyklen ausgesetzt, bevor sie abermals für einen zweiten Durchlauf abgefertigt wird. In den Ausführungsformen, in denen die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) auf eine begrenzte Anzahl von (z. B. 8) FMA-Schaltungen eingeschränkt ist, ist ein zweiter Durchlauf erforderlich. Der zweite Durchlauf kann wenigstens 16 Zyklen später (z. B. 16 Zyklen = 8 FMA-Einheiten * 2 Zyklen ADD-Latenzzeit) neu gestartet werden. Es wird angegeben, dass diese Aufteilung aufgrund des Folgenden möglich ist, das außerdem die im ersten und zweiten Weg berechneten Terme darstellt: C ^ M × N = C M × N + A M × K × B K × N = C M × N + A M × 8 × B 8 × N erster Weg + A M × K 8 × B K 8 × N zweiter Weg
    Figure DE102020126212A1_0009
  • In einer Ausführungsform wird beim Abfertigen einer Operation (z. B. Mikrooperation) aus der Hauptwarteschlange 2610 (z. B. als eine Instanz der Abfertigungsschaltungsanordnung 2300) ihre Anzahl der Akkumulation beobachtet (z. B. geprüft, ob K > 8). In bestimmten Ausführungsformen wird, falls (K ≤ Schwellwert (z. B. 8)), die Operation (z. B. Mikrooperation) direkt an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) gesendet, z. B. ohne sie in die Warteschlange 2612 des zweiten Durchlaufs zu kopieren, und/oder wird, falls (K > Schwellwert (z. B. 8)), die Operation (z. B. Mikrooperation) weiterhin an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) gesendet, z. B. während sie außerdem in die Warteschlange 2612 des zweiten Durchlaufs kopiert wird. In einer Ausführungsform wird in der Warteschlange 2612 des zweiten Durchlaufs K aktualisiert, so dass es der Rest der auszuführenden Akkumulationen ist (z. B. K - 8). In einer Ausführungsform löst jede Operation (z. B. Mikrooperation), die in die Warteschlange 2612 des zweiten Durchlaufs eingesetzt wird, einen (z. B. 16-) Zyklen-Zähler aus. Sobald der Zähler seine Zählung (z. B. 16 Zyklen) abgeschlossen hat, ist in einer Ausführungsform seine entsprechende Operation (z. B. Mikrooperation) geeignet, an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die PE-Schaltungen in 22) für den zweiten Ausführungsteil gesendet zu werden. Weil die Operationen (z. B. Mikrooperationen) in der Warteschlange 2612 des zweiten Durchlaufs älter sind, wird ihnen in einer Ausführungsform eine Priorität für das Abfertigen bereitgestellt, falls sie bereit sind. Das Folgende kann für die Warteschlangenauswahl verwendet werden: Select_queue = (Gültige uop des zweiten Durchlaufs) UND (16 Zyklen) ? second-PASS-QUEUE : MAIN-QUEUE. In einer Ausführungsform verwendet die Planungsschaltungsanordnung 2602 der Abfertigungsschaltungsanordnung 2600 den Multiplexer 2604, um einen Eintrag aus der Warteschlange 2612 des zweiten Durchlaufs auszuwählen. Zum Beispiel mit dem Multiplexer 2606, der entweder aus der Haupt-Warteschlange 2610 oder der zweiten Warteschlange 2612 auswählt, um eine Operation bereitzustellen, die über Ausgang 2608 an das FMA-Gitter zu senden ist.
  • 27 veranschaulicht eine Planungsschaltungsanordnung 2700 einer Abfertigungsschaltungsanordnung einer Matrixoperations-Beschleunigerschaltung für mehrere Durchläufe gemäß den Ausführungsformen der Offenbarung. Die Eingangsmatrix in diesen Ausführungsformen bezieht sich auf eine Eingangs-„B“-Matrix (z. B. Kachel), wobei dies aber lediglich veranschaulichend ist, und andere Matrizen (z. B. Kacheln) ähnlich geplant werden können.
  • Die Planungsschaltungsanordnung 2700 enthält einen Eingang 2702, um einen Wert zu empfangen, der die nächste Operation (z. B. Mikrooperation), die in der Matrixoperations-Beschleunigerschaltung ausgeführt werden soll, und insbesondere die nächste Operation, die ausgewählt und/oder zu der Operationsschaltungsanordnung (z. B. dem FMA-Gitter 2109 in 21 oder den PE-Schaltungen in 22) zur Ausführung abgefertigt wird, identifiziert. In einer Ausführungsform empfängt der Eingang 2702 die Ausgabe 2304 aus 23.
  • In bestimmten Ausführungsformen identifiziert der Eingang 2702 eine nächste Operation (und z. B. die entsprechenden Eingangs-/Ausgangskacheln), die durch die Planungsschaltungsanordnung 2700 abzufertigen ist. In bestimmten dieser Ausführungsformen enthält der Eingang 2702 einen Identifikations- (ID-) Wert, der eine Kachel (z. B. ein Satz von Registern, die eine Kachel in den Datenpuffern (z. B. Registern) 2105 in 21 bilden) repräsentiert. Die Planungsschaltungsanordnung 2700 enthält einen Speicher 2704, der eine aktuelle Kachel(n) identifiziert, die durch die Matrixoperations-Beschleunigerschaltung verarbeitet wird (werden), wobei er insbesondere die aktuelle(n) Kachel(n) identifizieren kann, deren Daten in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen sind (oder deren Daten in die/aus der Operationsschaltungsanordnung (z. B. das/dem FMA-Gitter 2109 in 21 oder die/den Pufferschaltungen in 22) geladen werden). In einer Ausführungsform enthält die Planungsschaltungsanordnung 2700 einen Speicher 2706 gültiger Kacheln (z. B. der Kachel B), um anzugeben, ob der Identifikationswert im Speicher 2704 ein gültiger Wert oder ein ungültiger Wert ist (die Hardware z. B. eine weitere Kachel und folglich einen weiteren Identifikationswert lädt).
  • Die Planungsschaltungsanordnung 2700 enthält einen Vergleichsschaltung 2708, um (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, mit (ii) der nächsten Kachel (z. B. der nächsten Kachel B), die in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen werden soll, zu vergleichen. In einer Ausführungsform wird dieser Vergleich durch das Vergleichen des durch die Planungsschaltungsanordnung für jede Kachel bereitgestellten Identifikationswertes, z. B. des Identifikationswertes, der bei der Eingabe der Kachel in die Datenpuffer (z. B. die Datenpuffer 2105 in 21) eines Matrixoperationsbeschleunigers bereitgestellt wird, ausgeführt, wobei der Identifikationswert jeder Kachel z. B. bereitgestellt wird, bevor die Werte für die Kachel in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) eingegeben werden.
  • In bestimmten Ausführungsformen soll die Vergleichsschaltung 2708 (i) die Eingangskachel (z. B. ihren ID-Wert in den Datenpuffern 2105 in 21) (z. B. „neue Kachel B“) vom Eingang 2702 für eine nächste Operation mit (ii) der aktuellen Kachel (z. B. der Kachel B), die gegenwärtig in die Operationsschaltungsanordnung geladen ist (z. B. gegenwärtig in das FMA-Gitter 2109 in 21 oder in die Pufferschaltung(en) in 22 geladen ist), z. B. dem ID-Wert für die Datenpuffer 2105 in 21 für eine Kachel, die gegenwärtig in das FMA-Gitter 2109 in 21 geladen ist, vergleichen. In einer Ausführungsform soll die Vergleichsschaltung 2708 den ID-Wert der aktuell benutzten Kachel mit dem ID-Wert der nächsten Kachel, die in der Operationsschaltungsanordnung verwendet werden soll, vergleichen und, falls sie gleich sind, einen Wert (z. B. eins), dass sie gleich sind, aktivieren. In einer Ausführungsform soll die Vergleichsschaltung 2708 den ID-Wert der aktuell benutzten Kachel aus dem Speicher 2704 mit dem ID-Wert der nächsten in der Operationsschaltungsanordnung zu verwendenden Kachel vergleichen und, falls sie gleich sind, einen Wert (z. B. eins), dass sie gleich sind, aktivieren, wenn der Speicher 2706 außerdem angibt, dass der Identifikationswert im Speicher 2704 z. B. ein gültiger Wert ist, und andernfalls einen anderen Wert (z. B. null) aktivieren.
  • Wenn (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, gleich (ii) der nächsten Kachel (z. B. der nächsten Kachel B) ist, die in die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) geladen werden soll, ist, wird in bestimmten Ausführungsformen der Wert der gleichen Kachel (z. B. der gleichen Kachel B) (z. B. eine Eins) aktiviert, um (z. B. über den Ausgang 2710) das Wechseln in eine Planungsbetriebsart zu veranlassen, die die Eingangsmatrix wiederverwendet, z. B. die Kachel B, die bereits innerhalb der Operationsschaltungsanordnung (z. B. in dem FMA-Gitter 2109 in 21 oder in der (den) Pufferschaltung(en) in 22) gespeichert ist, wiederverwendet, z. B. ohne sie aus den Datenpuffern (z. B. den Datenpuffern 2105 in 21), die von der Operationsschaltungsanordnung getrennt sind, neu zu laden.
  • In bestimmten Ausführungsformen soll die Vergleichsschaltung 2708 einen ersten Wert (z. B. einen) am Ausgang 2710 ausgeben, wenn (i) die aktuelle Kachel (z. B. die Kachel B), die in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder die Pufferschaltung(en) in 22) geladen ist, gleich (ii) der nächsten Kachel (z. B. der nächsten Kachel B) ist, die in die Operationsschaltungsanordnung geladen werden soll. Die Ausgabe 2710 kann dann zusammen mit der Eingabe vom NICHT-Logikgatter 2724 in das ODER-Logikgatter 2726 eingegeben werden. Die Ausgabe vom ODER-Logikgatter 2726 wird an den ersten Eingang des UND-Logikgatters 2730 gesendet. Der andere Eingang des UND-Logikgatters 2730 ist an das NICHT-Logikgatter 2728 gekoppelt, das an den M-Zähler 2718 gekoppelt ist. Der Ausgang 2732 des UND-Logikgatters 2730 soll eine Abfertigung einer nächsten Operation (z. B. Mikrooperation) bewirken, wenn in bestimmten Ausführungsformen eine vorhanden ist. Im Vergleich zu 25 enthält 27 einen Zähler 2716A für geradzahlige K und einen Zähler 2716B für ungeradzahlige K, wobei beide Zähler an einen jeweiligen Eingang des UND-Logikgatters 2720 gekoppelt sind. In einer Ausführungsform aktiviert der Zähler 2716A für geradzahlige K während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die B-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, einen Wert von eins für geradzahlige Ks und dann eine Null, wenn sie abgeschlossen (z. B. ein vorgegebener Wert für den Zähler geradzahliger K) sind, aktiviert der Zähler 2716B für ungeradzahlige K während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die B-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, einen Wert von eins für ungeradzahlige Ks und dann eine Null, wenn sie abgeschlossen (z. B. ein vorgegebener Wert für den Zähler ungeradzahliger K) sind, und aktiviert der M-Zähler 2718 während des Herunterzählens der Anzahl der Zyklen, in denen die Betriebsmittel (z. B. der Bus), die die A-Kachel in die Matrixoperations-Beschleunigerschaltung laden, belegt sind, einen Wert von Eins für M und dann eine Null, wenn sie abgeschlossen (z. B. ein vorgegebener Wert für den Zähler M) sind. Nach jedem Abfertigung kann der (können die) Zähler auf ihren ursprünglichen (z. B. von null verschiedenen) Wert rückgesetzt werden.
  • In einer Ausführungsform spezifiziert 27 den Auslöser der nächsten Operation, die an die Operationsschaltungsanordnung (z. B. das FMA-Gitter 2109 in 21 oder die Pufferschaltungen in 22) zu senden ist, wie folgt: die geradzahligen Zyklen werden durch den Zähler 2716A geradzahliger K verfolgt, während die ungeradzahligen Zyklen durch den Zähler 2716B ungeradzahliger K verfolgt werden, wobei irgendeine Operation (z. B. Mikrooperation), die abgefertigt wird, ihre entsprechenden Zähler geradzahliger K und ungeradzahliger K aktualisiert und jede Operation (z. B. Mikrooperation), die abgefertigt wird, außerdem z. B. den M-Zähler aktualisiert, wobei die Wiederverwendung der BK × N-Matrix überprüft wird.
  • In einer Ausführungsform, wenn (((K-ungerade == 0) ODER (K-ungerade == 0) ODER (SAME-B == 1)) UND (M <= 1)) DANN nächste Operation (z. B. Mikrooperation) abfertigen.
  • In einer Ausführungsform repräsentiert der Abfertigungsstatus den Fall, in dem einer der B-Bus-Zyklen (z. B. entweder der geradzahlige Zyklus oder der ungeradzahlige Zyklus) verfügbar ist (z. B. sein entsprechender Zähler null ist) und die erste FMA0 verfügbar ist (z. B. der M-Zähler null oder eins ist), wobei er die nächste Operation (z. B. Mikrooperation) entweder in der Haupt-Warteschlange 2610 oder in der Warteschlange 2612 des 2. Durchlaufs in die Operationsschaltungsanordnung (z. B. in das FMA-Gitter 2109 in 21 oder in die Pufferschaltung(en) in 22) zur Ausführung sendet.
  • In bestimmten Ausführungsformen sollten, falls der Auslöser geschieht, wenn der M-Zähler == 0 ist, das A und B im gleichen Zyklus an die TMM gesendet werden, und/oder sollte, falls der M-Zähler == 1 ist, der B-Bus einen Zyklus vor dem A-Bus an die TMM senden. Es wird angegeben, dass bestimmte Ausführungsformen für die Ausführung einer FMA-Schaltung (z. B. PE) eine Mehr- (z. B. 2-) Zyklen-Latenzzeit annehmen; wobei für den Fall, in dem die FMA-Schaltung (z. B. PE) eine Einzel-Zyklus-Latenzzeit aufweist, das Planen, z. B. einschließlich der Wiederverwendung von Kacheln, möglich ist.
  • Das Folgende sind Beispiele zum Spezifizieren des Planens. In einer Ausführungsform wird ein Kachelwiederverwendungsmechanismus (z. B. der Kachel B) zusammen mit dem Folgenden verwendet.
  • Beispiel 1.1 Gegeben sind drei Zahlen a, b und c. Es wird eine verschmolzene Multiplikations-Additions- (FMA-) Operation als die Addition von c zu dem Produkt von a und b, d. h., ĉ = c + a • b, definiert.
  • Beispiel 1.2 Gegeben sind die drei Matrizen AM × K , BK × N und CM × N . Es wird eine Matrixmultiplikation MM (M , K , N) als eine Operation definiert, die zu einer neuen Matrix ĈM × N führt, wobei jedes Element c ^ i ,j = c i ,j + l = 0 K 1 a i l b l j  
    Figure DE102020126212A1_0010
    ist.
  • In bestimmten Ausführungsformen wird hier eine Architekturbeschränkung, in der M, N, K ≤ Schwellenwert (z. B.16) ist, auferlegt.
  • Beispiel 1.3 Die Matrixwarteschlange MQ ist eine geordnete Menge von Matrixmultiplikationsoperationen, d. h., MQ = {M M1, M M2, ...}. Diese Menge repräsentiert die Matrixmultiplikationsoperationen, die sich an der RS im Bereitzustand befinden.
  • Beispiel 1.4 Die Warteschlange BMQ für große Matrizen ist eine geordnete Menge von Matrixmultiplikationsoperationen, d. h., BMQ = {M M1, M M2, ...}. Diese Warteschlange wird für die Matrixmultiplikationsoperationen von K > 8 verwendet, die eine zusätzliche Runde in der Matrixmultiplikationseinheit gemäß der Begrenzung 3 benötigen. Jedes Element in dieser Warteschlange weist einen internen Zähler auf und ist 16 Zyklen nach seiner Einfügung bereit. Diese Struktur implementiert zwei zusätzliche Verfahren Aktualisieren und bereit zum Aktualisieren und Prüfen, ob das obere Ende der Warteschlange MM bereit ist.
  • In einer Ausführungsform ist jeder der Operationsparameter der Matrixmultiplikation (MM) M, K, N und der Operanden A, B, C als Eigenschaft eines MM-Elements definiert, z. B. MM.K. Eine Matrixmultiplikation MM und ihre Operanden A, B, C vorausgesetzt, kann der Scheduler die Anfangszyklusoperationen dieser Operanden durch die Funktionen Abfertigen_A, Abfertigen_B, Abfertigen_C synchronisieren, die den Anfangszyklus als einen Eingangsparameter erhalten. Dann kann der Scheduler, wenn der Anfangszyklus für den Betrieb definiert ist, die Fortsetzung der Ausführung des Rests der MM-Operationen gemäß der Betriebsart veranlassen. Spezifisch werden in einer ersten (z. B. FMA_0-) Anordnung bei jedem nachfolgenden Zyklus die Elemente a_(i,0) mit i=0...M beginnend vom Eingangszyklus von Abfertigen_A rundgesendet, dann werden beim Zyklus + 2 in einer zweiten (z. B. FMA_1-) Anordnung die Elemente a_(i,1) mit i = 0 ... M weiter rundgesendet usw. In einer Ausführungsform wird der MM.C-Operand zwei Zyklen nach der Einfügung von A bis Abfertigen_C in die FMA_0-Anordnung eingesetzt, weil dies der Zeitpunkt zum Abschließen der FMA-Multiplikationsoperation ist. In einer Ausführungsform fügt Abfertigen_B alle zwei Zyklen die gesamte Zeile B_i jeweils in die FMA_i ein, wobei i = 0 ... K ist. Es wird angegeben, dass gemäß einigen Ausführungsformen das Laden einer einzelnen Matrixzeile pro Zyklus eine Systembeschränkung ist. In der Tat kann ein Scheduler basierend auf dieser Einschränkung die Zeitachse in geradzahlige und ungeradzahlige Zyklen aufteilen und die MM-Operationen in diese klassifizierten Zyklen einfügen. Dann Füllen, wenn einer dieser Zyklen für die Einfügung durch die Zähler M, K_geradzahlig, K_ungeradzahlig frei ist, die in jedem Zyklus aktualisiert werden. Im Fall MM.K > 8 die MM(M, K, N)-Operation in bestimmten Ausführungsformen in zwei Operationen, nämlich MM(M, 8, N) und MM(M, K - 8, N), aufteilen. In einer Ausführungsform enthält die Operation MM(M, 8, N) die ersten 8 FMA-Operationen von MM(M, K, N), wobei sie, wenn sie eingefügt wird, direkt zur Ausführung gesendet wird, wo die MM(M, K - 8, N) in die Warteschlange (z. B. in die Hauptwarteschlange 2610 in 26) eingereiht wird und wenigstens eine Schwellenanzahl (z. B. 16) Zyklen auf die Operation wartet, (bis MM(M, 8, N) beendet ist, um ihr Ergebnis der ersten Reihe zu berechnen), wobei dann dieses MM(M, 8, N)-Ergebnis als C-Eingabe der Matrix MM(M, K - 8, N) eingefügt wird, wenn sie ausgeführt wird.
  • 28 veranschaulicht den Pseudocode 2800 für die Matrixoperationsschaltungsanordnung gemäß den Ausführungsformen der Offenbarung.
  • 29 veranschaulicht ein Verfahren 2900 zum Verarbeiten eines Matrixoperationsbefehls gemäß den Ausführungsformen der Offenbarung. Ein Prozessor (oder z. B. ein Prozessorkern) kann das Verfahren 2900 z. B. in Reaktion auf das Empfangen einer Anforderung ausführen, einen Befehl von der Software auszuführen. Der Prozessor (oder z. B. der Prozessorkern) kann bestimmte Operationen bei einer Matrixoperations-Beschleunigerschaltung abladen. Das dargestellte Verfahren 2900 enthält das Verarbeiten eines Matrixoperations- (z. B. FMA-) Befehls durch Folgendes: Holen eines Befehls mit einem ersten Feld, das eine erste zweidimensionale Eingangsmatrix identifiziert, einem zweiten Feld, das eine zweite zweidimensionale Eingangsmatrix identifiziert, und einem Feld, das einen Ergebnisspeicher identifiziert, 2902, Decodieren des Befehls in einen decodierten Befehl mit einem Decoder eines Hardware-Prozessorkerns, wobei der Hardware-Prozessorkern an eine Matrixoperations-Beschleunigerschaltung gekoppelt ist, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst, wobei die Matrixoperations-Beschleunigerschaltung an erste mehrere Register, die die erste zweidimensionale Eingangsmatrix repräsentieren, und zweite mehrere Register, die die zweite zweidimensionale Eingangsmatrix repräsentieren, gekoppelt ist, 2904, um Daten, die dem ersten Feld (z. B. der Kachel A), dem zweiten Feld (z. B. der Kachel B) (und optional einem dritten Feld (z. B. der Kachel C)) zugeordnet sind, wiederzugewinnen, 2906, (optional) Planen des decodierten Befehls für die Ausführung 2908, Ausführen des decodierten Befehls, um einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden, Prüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert: Verhindern der Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und dem decodierten einzelnen Befehls, Ausführen einer Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer, um ein Ergebnis zu erzeugen, und Speichern des Ergebnisses in dem Ergebnisspeicher, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert: Laden der zweiten zweidimensionalen Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen, Ausführen der Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer, um ein Ergebnis zu erzeugen, und Speichern des Ergebnisses im Ergebnisspeicher 2910 und Einspeichern des Ergebnisses des ausgeführten Befehls 2912.
  • Beispielhafte Architekturen, Systeme usw., in denen das Obige verwendet werden kann, werden im Folgenden ausführlich beschrieben.
  • Wenigstens einige Ausführungsformen der offenbarten Techniken können hinsichtlich der folgenden Beispiele beschrieben werden:
    • Beispiel 1. Eine Vorrichtung, die Folgendes umfasst:
      • eine Matrixoperations-Beschleunigerschaltung, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst;
      • erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, die an die Matrixoperations-Beschleunigerschaltung gekoppelt sind;
      • zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, die an die Matrixoperations-Beschleunigerschaltung gekoppelt sind;
      • einen Decodierer eines Hardware-Prozessorkerns, der an die Matrixoperations-Beschleunigerschaltung gekoppelt ist, um einen einzelnen Befehl in einen decodierten einzelnen Befehl zu decodieren, wobei der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert, und
      • eine Ausführungsschaltung des Hardware-Prozessorkerns, um den decodierten einzelnen Befehl auszuführen, um:
        • einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden,
        • zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist,
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert:
          • die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern,
          • eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und
          • das Ergebnis in dem Ergebnisspeicher zu speichern, und
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert:
          • die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden,
          • die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und
          • das Ergebnis in dem Ergebnisspeicher zu speichern.
    • Beispiel 2. Die Vorrichtung nach Beispiel 1, wobei, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert die Matrixoperations-Beschleunigerschaltung die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls beginnen soll.
    • Beispiel 3. Die Vorrichtung nach Beispiel 1, wobei die Matrixoperations-Beschleunigerschaltung für jede mehreren Register einen Identifikationswert zuweist, die eine zweidimensionale Eingangsmatrix repräsentieren, und die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
    • Beispiel 4. Die Vorrichtung nach Beispiel 3, wobei die Matrixoperations-Beschleunigerschaltung den zweiten mehreren Registern einen anderen Identifikationswert zuweisen soll, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern.
    • Beispiel 5. Die Vorrichtung nach Beispiel 1, wobei, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, die Matrixoperations-Beschleunigerschaltung den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht lädt.
    • Beispiel 6. Die Vorrichtung nach Beispiel 1, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
    • Beispiel 7. Die Vorrichtung nach Beispiel 1, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
    • Beispiel 8. Die Vorrichtung nach Beispiel 7, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
    • Beispiel 9. Ein Verfahren, das Folgendes umfasst:
      • Decodieren, mit einem Decodierer eines Hardware-Prozessorkerns, eines einzelnen Befehls in einen decodierten einzelnen Befehl, wobei der Hardware-Prozessorkern an eine Matrixoperations-Beschleunigerschaltung gekoppelt ist, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst, wobei die Matrixoperations-Beschleunigerschaltung an erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, und zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, gekoppelt ist und der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert; und
      • Ausführen des decodierten einzelnen Befehls mit einer Ausführungsschaltung des Hardware-Prozessorkerns, um:
        • einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden,
        • zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist,
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert:
          • die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern,
          • eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und
          • das Ergebnis in dem Ergebnisspeicher zu speichern, und
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert:
          • die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden,
          • die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern.
    • Beispiel 10. Das Verfahren nach Beispiel 9, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert, ferner das Beginnen der Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls umfasst.
    • Beispiel 11. Das Verfahren nach Beispiel 9, das ferner das Zuweisen eines Identifikationswerts für jede mehreren Register, die eine zweidimensionale Eingangsmatrix repräsentieren, umfasst, wobei die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
    • Beispiel 12. Das Verfahren nach Beispiel 11, das ferner das Zuweisen eines anderen Identifikationswerts den zweiten mehreren Registern, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern, umfasst.
    • Beispiel 13. Das Verfahren nach Beispiel 9, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, ferner umfasst, den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht zu laden.
    • Beispiel 14. Das Verfahren nach Beispiel 9, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
    • Beispiel 15. Das Verfahren nach Beispiel 9, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
    • Beispiel 16. Das Verfahren nach Beispiel 15, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
    • Beispiel 17. Ein nicht transitorisches maschinenlesbares Medium, das Code speichert, der, wenn er durch eine Maschine ausgeführt wird, die Maschine veranlasst, ein Verfahren auszuführen, das Folgendes umfasst:
      • Decodieren, mit einem Decodierer eines Hardware-Prozessorkerns, eines einzelnen Befehls in einen decodierten einzelnen Befehl, wobei der Hardware-Prozessorkern an eine Matrixoperations-Beschleunigerschaltung gekoppelt ist, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst, wobei die Matrixoperations-Beschleunigerschaltung an erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, und zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, gekoppelt ist und der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert; und
      • Ausführen des decodierten einzelnen Befehls mit einer Ausführungsschaltung des Hardware-Prozessorkerns, um:
        • einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden,
        • zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist,
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert:
          • die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern,
          • eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und
          • das Ergebnis in dem Ergebnisspeicher zu speichern, und
        • wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert:
          • die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden,
          • die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und
          • das Ergebnis in dem Ergebnisspeicher zu speichern.
    • Beispiel 18. Das nicht transitorische maschinenlesbare Medium nach Beispiel 17, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert, ferner das Beginnen der Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls umfasst.
    • Beispiel 19. Das nicht transitorische maschinenlesbare Medium nach Beispiel 17, das ferner das Zuweisen eines Identifikationswerts für jede mehreren Register, die eine zweidimensionale Eingangsmatrix repräsentieren, umfasst, wobei die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
    • Beispiel 20. Das nicht transitorische maschinenlesbare Medium nach Beispiel 19, das ferner das Zuweisen eines anderen Identifikationswerts den zweiten mehreren Registern, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern, umfasst.
    • Beispiel 21. Das nicht transitorische maschinenlesbare Medium nach Beispiel 17, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, ferner umfasst, den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht zu laden.
    • Beispiel 22. Das nicht transitorische maschinenlesbare Medium nach Beispiel 17, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
    • Beispiel 23. Das nicht transitorische maschinenlesbare Medium nach Beispiel 17, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
    • Beispiel 24. Das nicht transitorische maschinenlesbare Medium nach Beispiel 23, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
  • In einer noch weiteren Ausführungsform umfasst eine Vorrichtung eine Datenspeichervorrichtung, die Code speichert, der, wenn er durch einen Hardware-Prozessor ausgeführt wird, den Hardware-Prozessor veranlasst, irgendein hier offenbartes Verfahren auszuführen. Eine Vorrichtung kann sein, wie in der ausführlichen Beschreibung beschrieben ist. Ein Verfahren kann sein, wie in der ausführlichen Beschreibung beschrieben ist.
  • AUSFÜHRLICHE BEISPIELHAFTE SYSTEME, PROZESSOREN UND EMULATION
  • Hierin sind Beispiele der Hardware, Software usw. ausführlich beschrieben, um die oben beschriebenen Befehle auszuführen. Das, was im Folgenden beschrieben wird, beschreibt die Aspekte der Befehlsausführung einschließlich verschiedener Pipelinestufen, wie z. B. Holen, Decodieren, Planen, Ausführen, Stilllegen usw., ausführlich.
  • BEFEHLSSÄTZE
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate enthalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. die Anzahl der Bits, den Ort der Bits) definieren, um unter anderem die auszuführende Operation (z. B. den Opcode) und den Operand(en), an dem (denen) diese Operation ausgeführt werden soll, und/oder ein anderes Datenfeld (andere Datenfelder) (z. B. eine Maske) zu spezifizieren. Einige Befehlsformate sind durch die Definition von Befehlsschablonen (oder Unterformaten) weiter aufgegliedert. Die Befehlsschablonen eines gegebenen Befehlsformats können z. B. so definiert sein, dass sie andere Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, wobei wenigstens einige verschiedene Bitpositionen aufweisen, weil weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Folglich wird jeder Befehl eines ISA unter Verwendung eines gegebenen Befehlsformats (und in einer gegebenen Befehlsschablone der Befehlsschablonen dieses Befehlsformats, falls sie definiert sind) ausgedrückt, wobei er Felder zum Spezifizieren der Operation und der Operanden enthält. Ein beispielhafter ADD-Befehl weist z. B. einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zu spezifizieren, um Operanden (Quelle1/Ziel und Quelle2) auszuwählen; wobei ein Auftreten dieses ADD-Befehls in einem Befehlsstrom spezifische Inhalte in den Operandenfeldern aufweist, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als die weiterentwickelten Vektorerweiterungen (AVX) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-Codierungsschema (VEX-Codierungsschema) verwenden, ist freigegeben und/oder veröffentlicht worden (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, November 2018; und siehe Intel® Architecture Instruction Set Extensions Programming Reference, Oktober 2018).
  • Beispielhafte Befehlsformate
  • Die Ausführungsformen des (der) hier beschriebenen Befehls (Befehle) können in verschiedenen Formaten verkörpert sein. Zusätzlich werden im Folgenden beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Die Ausführungsformen des Befehls (der Befehle) können in derartigen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf jene eingeschränkt, die ausführlich beschrieben werden.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (es gibt z. B. bestimmte Felder, die für Vektoroperationen spezifisch sind). Während die Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden in alternativen Ausführungsformen nur Vektoroperationen das vektorfreundliche Befehlsformat.
  • Die 30A-30B sind Blockschaltpläne, die ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen gemäß den Ausführungsformen der Offenbarung veranschaulichen. 30A ist ein Blockschaltplan, der ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen der Klasse A gemäß den Ausführungsformen der Offenbarung veranschaulicht; während 30B ein Blockschaltplan ist, der das generische vektorfreundliche Befehlsformat und dessen Befehlsschablonen der Klasse B gemäß den Ausführungsformen der Offenbarung veranschaulicht. Spezifisch ein generisches vektorfreundliches Befehlsformat 3000, für das die Befehlsschablonen der Klasse A und der Klasse B definiert sind, wobei beide von diesen Befehlsschablonen ohne Speicherzugriff 3005 und Befehlsschablonen mit Speicherzugriff 3020 enthalten. Der Begriff generisch im Kontext des vektorfreundlichen Befehlsformats bezieht sich auf das Befehlsformat, das nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Indessen werden die Ausführungsformen der Offenbarung beschrieben, in denen das vektorfreundliche Befehlsformat das Folgende unterstützt: eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes) oder 64 Bits (8 Bytes), (wobei folglich ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder 8 Elementen in Vierfachwortgröße besteht); eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 16 Bits (2 Bytes) oder 8 Bits (1 Byte); eine Länge (oder Größe) der Vektoroperanden von 32 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); und eine Länge (oder Größe) der Vektoroperanden von 16 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); alternative Ausführungsformen können mehr, weniger und/oder andere Größen der Vektoroperanden (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Breiten der Datenelemente (z. B. Breiten der Datenelemente von 128 Bits (16 Bytes)) unterstützen.
  • Die Befehlsschablonen der Klasse A in 30A enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 3005 ist eine Befehlsschablone einer Operation 3010 des Typs der vollen Rundensteuerung ohne Speicherzugriff und eine Befehlsschablone einer Operation 3015 des Datentransformationstyps ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 3020 ist eine zeitliche Befehlsschablone 3025 mit Speicherzugriff und eine nicht zeitliche Befehlsschablone 3030 mit Speicherzugriff gezeigt. Die Befehlsschablonen der Klasse B in 30B enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 3005 ist eine Befehlsschablone einer Operation 3012 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff und eine Befehlsschablone einer Operation 3017 des vsize-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 3020 ist eine Befehlsschablone mit Schreibmaskensteuerung 3027 und Speicherzugriff gezeigt.
  • Das generische vektorfreundliche Befehlsformat 3000 enthält die folgenden Felder, die im Folgenden in der in den 30A-30B veranschaulichten Reihenfolge aufgelistet sind.
  • Formatfeld 3040 - ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und folglich die Auftritte von Befehlen in dem vektorfreundlichen Befehlsformat in den Befehlsströmen. Dieses Feld ist als solches in dem Sinn optional, dass es für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht erforderlich ist.
  • Basisoperationsfeld 3042 - sein Inhalt unterscheidet die verschiedenen Basisoperationen.
  • Registerindexfeld 3044 - sein Inhalt spezifiziert direkt oder durch Adressenerzeugung die Orte der Quell- und Zieloperanden, ob sie sich in Registern oder im Speicher befinden. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer P x Q-Register Datei (z. B. 32 × 512, 16 × 128, 32 × 1024, 64 × 1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, und sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 3046 - sein Inhalt unterscheidet die Vorkommen der Befehle in dem generischen Vektorbefehlsformat, die den Vektorzugriff spezifizieren, von jenen, die dies nicht tun; d. h., zwischen den Befehlsschablonen ohne Speicherzugriff 3005 und den Befehlsschablonen 3020 mit Speicherzugriff. Die Operationen mit Speicherzugriff lesen und/oder schreiben in die Speicherhierarchie (wobei sie in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung der Werte in den Registern spezifizieren), während die Operationen ohne Speicherzugriff dies nicht tun (z. B. die Quelle und die Ziele sind Register). Während in einer Ausführungsform dieses Feld außerdem zwischen drei verschiedenen Weisen unterscheidet, um die Speicheradressenberechnungen auszuführen, können alternative Ausführungsformen mehr, weniger oder andere Weisen unterstützen, um die Speicheradressenberechnungen auszuführen.
  • Vergrößerungsoperationsfeld 3050 - sein Inhalt unterscheidet, welche von einer Vielfalt verschiedener Operationen zusätzlich zu der Basisoperation auszuführen ist. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Offenbarung ist dieses Feld in ein Klassenfeld 3068, ein Alphafeld 3052 und ein Betafeld 3054 unterteilt. Das Vergrößerungsoperationsfeld 3050 ermöglicht, dass gemeinsame Gruppen von Operationen anstatt in 2, 3 oder 4 Befehlen in einem einzigen Befehl ausgeführt werden.
  • Maßstabsfeld 3060 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfeldes für die Speicheradressenerzeugung (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis verwendet).
  • Verschiebungsfeld 3062A - sein Inhalt wird als ein Teil der Speicheradressenerzeugung verwendet (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 3062B (es sei angegeben, dass die Nebeneinanderstellung des Verschiebungsfeldes 3062A direkt über dem Verschiebungsfaktorfeld 3062B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der mit der Größe eines Speicherzugriffs (N) zu skalieren ist ־wobei N die Anzahl der Bytes in dem Speicherzugriff ist (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, wobei folglich der Inhalt des Verschiebungsfaktorfeldes mit der Gesamtgröße (N) der Speicheroperanden multipliziert wird, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessor-Hardware zur Laufzeit basierend auf dem vollen Opcode-Feld 3074 (das hier später beschrieben wird) und dem Datenmanipulationsfeld 3054C bestimmt. Das Verschiebungsfeld 3062A und das Verschiebungsfaktorfeld 3062B sind in dem Sinn optional, dass sie für die Befehlsschablonen ohne Speicherzugriff 3005 nicht verwendet werden und/oder verschiedene Ausführungsformen nur eines oder keines der beiden implementieren können.
  • Datenelementbreitenfeld 3064 - sein Inhalt unterscheidet, welche von einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinn optional, dass es nicht erforderlich ist, falls nur eine Datenelementbreite unterstützt wird und/oder die Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 3070 - sein Inhalt steuert auf einer Grundlage pro Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Vergrößerungsoperation widerspiegelt. Die Befehlsschablonen der Klasse A unterstützen die Verschmelzungs-Schreibmaskierung, während die Befehlsschablonen der Klasse B sowohl die Verschmelzungs- als auch die Nullsetzungs-Schreibmaskierung unterstützen. Beim Verschmelzen ermöglichen die Vektormasken, dass irgendein Satz von Elementen in dem Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) vor Aktualisierungen geschützt ist; in einer anderen Ausführungsform wird der alte Wert jedes Element des Ziels, wo das entsprechende Maskenbit eine 0 aufweist, beibehalten. Im Gegensatz ermöglichen die Vektormasken bei der Nullsetzung, dass während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) irgendein Satz von Elementen in dem Ziel null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die ausgeführt wird, (d. h., die Spanne der Elemente, die modifiziert werden, vom ersten bis zum letzten) zu steuern; es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Folglich ermöglicht das Schreibmaskenfeld 3070 teilweise Vektoroperationen, einschließlich Ladeoperationen, Speicheroperationen, arithmetisch, logisch usw. Während die Ausführungsformen der Offenbarung beschrieben werden, in denen der Inhalt des Schreibmaskenfeldes 3070 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält, (wobei folglich der Inhalt des Schreibmaskenfeldes 3070 indirekt identifiziert, dass die Maskierung auszuführen ist), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfeldes 3070 direkt die Maskierung spezifiziert, die auszuführen ist.
  • Sofortfeld 3072 - sein Inhalt ermöglicht die Spezifikation eines Sofortwerts. Dieses Feld ist in dem Sinn optional, dass es in einer Implementierung des generischen vektorfreundlichen Formats nicht vorhanden ist, die keinen Sofortwert unterstützt, und dass es in Befehlen nicht vorhanden ist, die keinen Sofortwert verwenden.
  • Klassenfeld 3068 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. In den 30A-B wählen die Inhalte dieses Feldes zwischen den Befehlen der Klasse A und der Klasse B aus. In den 30A-B werden die Vierecke mit abgerundeten Ecken verwendet, um einen spezifischen Wert anzugeben, der in einem Feld vorhanden ist (z. B. Klasse A 3068A bzw. Klasse B 3068B für das Klassenfeld 3068 in 30A-B).
  • Befehlsschablonen der Klasse A
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 3005 der Klasse A wird das Alphafeld 3052 als ein RS-Feld 3052A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 3052A.1 und die Datentransformation 3052A.2 sind für die Befehlsschablonen der Operation 3010 des Rundentyps ohne Speicherzugriff bzw. der Operation 3015 des Datentransformationstyps ohne Speicherzugriff spezifiziert), während das Betafeld 3054 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 3005 sind das Maßstabsfeld 3060, das Verschiebungsfeld 3062A und das Verschiebungsmaßstabsfeld 3062B nicht vorhanden.
  • Befehlsschablonen ohne Speicherzugriff - die Operation des Typs der vollen Rundensteuerung
  • In der Befehlsschablone der Operation 3010 des Typs der vollen Rundensteuerung ohne Speicherzugriff wird das Betafeld 3054 als ein Rundensteuerfeld 3054A interpretiert, dessen Inhalt(e) ein statisches Runden bereitstellen. Während in den beschriebenen Ausführungsformen der Offenbarung das Rundensteuerfeld 3054A ein Feld 3056 zum Unterdrücken aller Gleitkomma-Ausnahmen (SAE) und ein Rundenoperations-Steuerfeld 3058 enthält, können alternative Ausführungsformen das Codieren dieser beiden Konzepte in dasselbe Feld unterstützen oder können nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundenoperations-Steuerfeld 3058 aufweisen).
  • SAE-Feld 3056 - sein Inhalt unterscheidet, ob die Ausnahmeereignismeldung zu sperren ist oder nicht; wenn der Inhalt des SAE-Feldes 3056 angibt, dass die Unterdrückung freigegeben ist, meldet ein gegebener Befehl keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung.
  • Rundenoperations-Steuerfeld 3058 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 3058 das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Offenbarung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, hebt der Inhalt des Rundenoperations-Steuerfelds 3050 diesen Registerwert auf.
  • Befehlsschablonen ohne Speicherzugriff - die Operation des Datentransformationstyps
  • In der Befehlsschablone der Operation 3015 des Datentransformationstyps ohne Speicherzugriff wird das Betafeld 3054 als ein Datentransformationsfeld 3054B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen ausgeführt werden soll (z. B. keine Datentransformation, „Swizzle“, Rundsenden).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 3020 der Klasse A wird das Alphafeld 3052 als ein Räumungshinweisfeld 3052B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 30A sind zeitlich 3052B.1 und nicht zeitlich 3052B.2 für die zeitliche Befehlsschablone mit Speicherzugriff 3025 bzw. die nicht zeitliche Befehlsschablone mit Speicherzugriff 3030 spezifiziert), während das Betafeld 3054 als ein Datenmanipulationsfeld 3054C interpretiert wird, dessen Inhalt unterscheidet, welche von einer Anzahl von Datenmanipulationsoperationen (die außerdem als Grundelemente bekannt sind) ausgeführt werden soll (z. B. keine Manipulation; Rundsenden; Aufwärtsumsetzung einer Quelle; und Abwärtsumsetzung eines Ziels). Die Befehlsschablonen mit Speicherzugriff 3020 enthalten das Maßstabsfeld 3060 und optional das Verschiebungsfeld 3062A oder das Verschiebungsmaßstabsfeld 3062B.
  • Die Vektorspeicherbefehle führen Vektor-Ladeoperationen aus dem und Vektor-Speicheroperationen in den Speicher mit Umsetzungsunterstützung aus. Wie bei regelmäßigen Vektorbefehlen übertragen die Vektorspeicherbefehle Daten von dem/zu dem Speicher in einer datenelementweisen Weise, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske vorgeschrieben sind, die als die Schreibmaske ausgewählt ist.
  • Befehlsschablonen mit Speicherzugriff - zeitlich
  • Die zeitlichen Daten sind Daten, die wahrscheinlich bald genug erneut verwendet werden, um von der Cache-Speicherung zu profitieren. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Befehlsschablonen mit Speicherzugriff - nicht zeitlich
  • Es ist unwahrscheinlich, dass die nicht zeitlichen Daten bald genug erneut verwendet werden, um von der Cache-Speicherung im Cache der 1. Ebene zu profitieren, wobei ihnen die Priorität für die Räumung gegeben werden sollte. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Befehlsschablonen der Klasse B
  • In dem Fall der Befehlsschablonen der Klasse B wird das Alphafeld 3052 als ein Schreibmasken-Steuerfeld (Z) 3052C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 3070 gesteuerte Schreibmaskierung eine Verschmelzung oder eine Nullsetzung sein sollte.
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 3005 der Klasse B wird ein Teil des Betafeldes 3054 als ein RL-Feld 3057A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 3057A.1 und die Vektorlänge (VSIZE) 3057A.2 sind jeweils für die Befehlsschablone der Operation 3012 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff bzw. die Befehlsschablone der Operationen 3017 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff spezifiziert), während der Rest des Betafeldes 3054 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 3005 sind das Maßstabsfeld 3060, das Verschiebungsfeld 3062A und das Verschiebungsmaßstabsfeld 3062B nicht vorhanden.
  • In der Befehlsschablone der Operation 3010 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 3054 als ein Rundenoperationsfeld 3059A interpretiert, wobei die Ausnahmeereignismeldung gesperrt ist (ein gegebener Befehl meldet keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung).
  • Rundenoperations-Steuerfeld 3059A - genau wie das Rundenoperations-Steuerfeld 3058, sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 3059A das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Offenbarung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, hebt der Inhalt des Rundenoperations-Steuerfeldes 3050 diesen Registerwert auf.
  • In der Befehlsschablone der Operation 3017 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 3054 als ein Vektorlängenfeld 3059B interpretiert, dessen Inhalt unterscheidet, mit welcher von einer Anzahl von Datenvektorlängen gearbeitet werden soll (z. B. 128, 256 oder 512 Bytes).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 3020 der Klasse B wird ein Teil des Betafeldes 3054 als ein Rundsendefeld 3057B interpretiert, dessen Inhalt unterscheidet, ob eine Datenmanipulationsoperation des Rundsendetyps ausgeführt werden soll, während der Rest des Betafeldes 3054 als das Vektorlängenfeld 3059B interpretiert wird. Die Befehlsschablonen mit Speicherzugriff 3020 enthalten das Maßstabsfeld 3060 und optional das Verschiebungsfeld 3062A oder das Verschiebungsmaßstabsfeld 3062B.
  • Bezüglich des generischen vektorfreundlichen Befehlsformats 3000 ist gezeigt, dass ein volles Opcode-Feld 3074 das Formatfeld 3040, das Basisoperationsfeld 3042 und das Datenelementbreitenfeld 3064 enthält. Während eine Ausführungsform gezeigt ist, in der das volle Opcode-Feld 3074 alle diese Felder enthält, wobei das volle Opcode-Feld 3074 in den Ausführungsformen, die nicht alle von ihnen unterstützen, weniger als alle dieser Felder enthält. Das volle Opcode-Feld 3074 stellt den Operationscode (den Opcode) bereit.
  • Das Vergrößerungsoperationsfeld 3050, das Datenelementbreitenfeld 3064 und das Schreibmaskenfeld 3070 ermöglichen, dass diese Merkmale in dem generischen vektorfreundlichen Befehlsformat auf einer Grundlage pro Befehl spezifiziert werden.
  • Die Kombination des Schreibmaskenfeldes und des Datenelementbreitenfeldes erzeugt typisierte Befehle, weil sie ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsschablonen, die innerhalb der Klasse A und der Klasse B gefunden werden, sind in verschiedenen Situationen vorteilhaft. In einigen Ausführungsformen der Offenbarung können verschiedene Prozessoren oder verschiedene Kerne innerhalb eines Prozessors nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Ein Hochleistungs-Out-of-Order-Universalkern, der für die Universalberechnung vorgesehen ist, kann nur die Klasse B unterstützen, ein Kern, der hauptsächlich für die Graphik- und/oder wissenschaftliche (Durchsatz-) Berechnung vorgesehen ist, kann nur die Klasse A unterstützen, und ein Kern, der für beides vorgesehen ist, kann beides unterstützen (selbstverständlich befindet sich ein Kern, der irgendeine Mischung der Schablonen und der Befehle aus beiden Klassen, aber nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Geltungsbereichs dieser Offenbarung). Außerdem kann ein einziger Prozessor mehrere Kerne enthalten, von denen alle die gleiche Klasse unterstützen oder in dem verschiedene Kerne verschiedene Klassen unterstützen. In einem Prozessor mit separaten Graphik- und Universalkernen kann z. B. einer der Graphikkerne, der hauptsächlich für Graphik- und/oder wissenschaftliche Berechnung vorgesehen ist, nur die Klasse A unterstützen, während einer oder mehrerer der Universalkerne Hochleistungs-Universalkerne mit Out-of-Order-Ausführung und Registerumbenennung sein können, die für die Universalberechnung vorgesehen sind, die nur die Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Graphikkern aufweist, kann einen oder mehrere In-Order- oder Out-of-Order-Universalkerne enthalten, die sowohl die Klasse A als auch die Klasse B unterstützen. Selbstverständlich können die Merkmale von einer Klasse außerdem in anderen Ausführungsformen der Offenbarung in der anderen Klasse implementiert sein. Die Programme, die in einer höheren Sprache geschrieben sind, würden (z. B. rechtzeitig kompiliert oder statisch kompiliert) in eine Vielfalt verschiedener ausführbarer Formen übersetzt werden, einschließlich des Folgenden: 1) eine Form, die nur die Befehle der Klasse(n) aufweist, die durch den Zielprozessor für die Ausführung unterstützt wird (werden); oder 2) eine Form, die alternative Routinen aufweist, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind und die Steuerungsablaufcode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die durch den Prozessor unterstützt werden, der gegenwärtig den Code ausführt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 31 ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß den Ausführungsformen der Offenbarung veranschaulicht. 31 zeigt ein spezifisches vektorfreundliches Befehlsformat 3100, das in dem Sinn spezifisch ist, dass es sowohl den Ort, die Größe, die Interpretation und die Reihenfolge der Felder als auch die Werte für einige dieser Felder spezifiziert. Das spezifische vektorfreundliche Befehlsformat 3100 kann verwendet werden, um den x86-Befehlssatz zu erweitern, wobei folglich einige der Felder ähnlich oder die gleichen wie jene sind, die in dem vorhandenen x86-Befehlssatz und dessen Erweiterung (z. B. AVX) verwendet werden. Dieses Format bleibt mit dem Präfixcodierungsfeld, dem echten Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und den Sofortfeldern des vorhandenen x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder nach 30, in die die Felder nach 31 abbilden, sind veranschaulicht.
  • Es sollte erkannt werden, dass, obwohl die Ausführungsformen der Offenbarung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 3100 im Kontext des generischen vektorfreundlichen Befehlsformats 3000 für Veranschaulichungszwecke beschrieben werden, die Offenbarung nicht auf das spezifische vektorfreundliche Befehlsformat 3100 eingeschränkt ist, mit Ausnahme, wo es beansprucht ist. Das generische vektorfreundliche Befehlsformat 3000 betrachtet z. B. verschiedene mögliche Größen für die verschiedenen Felder, während gezeigt ist, dass das spezifische vektorfreundliche Befehlsformat 3100 Felder mit spezifischen Größen aufweist. Während als ein spezifisches Beispiel das Datenelementbreitenfeld 3064 in dem spezifischen vektorfreundlichen Befehlsformat 3100 als ein Ein-Bit-Feld veranschaulicht ist, ist die Offenbarung nicht in dieser Weise eingeschränkt (d. h., das generische vektorfreundliche Befehlsformat 3000 betrachtet andere Größen des Datenelementbreitenfelds 3064).
  • Das generische vektorfreundliche Befehlsformat 3000 enthält die folgenden Felder, die im Folgenden in der in 31A veranschaulichten Reihenfolge aufgelistet sind.
  • EVEX-Präfix (die Bytes 0-3) 3102 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 3040 (das EVEX-Byte 0, die Bits [7:0]) - das erste Byte (das EVEX-Byte 0) ist das Formatfeld 3040, wobei es 0x62 enthält (den eindeutigen Wert, der zum Unterscheiden des vektorfreundlichen Befehlsformats in einer Ausführungsform der Offenbarung verwendet wird).
  • Die zweiten-vierten Bytes (die EVEX-Bytes 1-3) enthalten eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bereitstellen.
  • REX-Feld 3105 (das EVEX-Byte 1, die Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (dem EVEX-Byte 1, dem Bit [7] - R), einem EVEX.X-Bitfeld (dem EVEX-Byte 1, dem Bit [6] - X) und dem 3057BEX-Byte 1, dem Bit [5] - B). Das EVEX.R-, das EVEX.X- und das EVEX.B-Bitfeld stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit, wobei sie unter Verwendung der 1-Komplementform codiert sind, d. h., ZMM0 ist als 1111 B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie es in der Technik bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch das Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 3010 - dies ist der erste Teil des REX'-Feldes 3010 und ist das EVEX.R'-Bitfeld (das EVEX-Byte 1, das Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. In einer Ausführungsform der Offenbarung ist dieses Bit zusammen mit anderen, wie im Folgenden angegeben wird, in einem bitinvertierten Format gespeichert, um es (in dem wohlbekannten x86-32-Bit-Modus) von dem BOUND-Befehl zu unterscheiden, dessen echtes Opcode-Byte 62 ist, das aber in dem (im Folgenden beschriebenen) MOD R/M-Feld den Wert von 11 in dem MOD-Feld nicht akzeptiert; alternative Ausführungsformen der Offenbarung speichern dieses und die anderen im Folgenden angegebenen Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch das Kombinieren von EVEX.R', EVEX.R und den anderen RRR von den anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 3115 (das EVEX-Byte 1, die Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 3064 (das EVEX-Byte 2, das Bit [7] - W) - ist durch die Schreibweise EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (die Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 3120 (das EVEX-Byte 2, die Bits [6:3] - vvvv) - die Rolle des EVEX.vvvv kann das Folgende enthalten: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, ist in einer invertieren (1-Komplement-) Form spezifiziert und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) EVEX.vvvv codiert den Zielregisteroperanden und ist in 1-Komplement-Form für bestimmte Vektorverschiebungen spezifiziert; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111 b enthalten. Folglich codiert das EVEX.vvvv-Feld 3120 die 4 Bits niedriger Ordnung des ersten Quellregister-Spezifikationselements, das in invertierter (1-Komplement-) Form gespeichert ist. In Abhängigkeit von dem Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
  • EVEX.U 3068 Klassenfeld (das EVEX-Byte 2, das Bit [2] - U) - Falls EVEX.U = 0, gibt es die Klasse A oder EVEX.U0 an; falls EVEX.U = 1, gibt es die Klasse B oder EVEX.U 1 an.
  • Präfixcodierungsfeld 3125 (das EVEX-Byte 2, die Bits [1:0] - pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zum Bereitstellen von Unterstützung für die Alt-SSE-Befehle in dem EVEX-Präfixformat weist dies außerdem den Vorteil des Verdichtens des SIMD-Präfixes auf (anstatt ein Byte zu erfordern, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). Um die Alt-SSE-Befehle, die ein SIMD-Präfix verwenden (66H, F2H, F3H), sowohl im Altformat als auch im EVEX-Präfixformat zu unterstützen, sind in einer Ausführungsform diese Alt-SIMD-Präfixe in dem SIMD-Präfixcodierungsfeld codiert; wobei sie zur Laufzeit in den Alt-SIMD-Präfix expandiert werden, bevor sie dem PLA der Decodierschaltung bereitgestellt werden (so kann der PLA sowohl das Alt- als auch das EVEX-Format dieser Altbefehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfeldes als eine Opcode-Erweiterung direkt verwenden könnten, erweitern bestimmte Ausführungsformen in einer ähnlichen Weise für die Konsistenz, wobei sie es aber ermöglichen, dass durch diese Alt-SIMD-Präfixe verschiedene Bedeutungen spezifiziert werden. Eine alternative Ausführungsform kann den PLA neu konstruieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und erfordert folglich die Erweiterung nicht.
  • Alphafeld 3052 (das EVEX-Byte 3, das Bit [7] - EH; außerdem als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; außerdem mit α veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Betafeld 3054 (das EVEX-Byte 3, die Bits [6:4] - SSS, außerdem als EVEX.s2-0, EVEX.r2-0, EVEX.rrl, EVEX.LL0, EVEX.LLB bekannt; außerdem mit βββ veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • REX'-Feld 3010 - dies ist der Rest des REX'-Feldes und ist das EVEX.V'-Bitfeld (das EVEX-Byte 3, das Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit ist in einem bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch das Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 3070 (das EVEX-Byte 3, die Bits [2:0] - kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorher beschrieben worden ist. In einer Ausführungsform der Offenbarung weist der spezifische Wert EVEX.kkk = 000 ein spezifisches Verhalten auf, das impliziert, dass für den speziellen Befehl keine Schreibmaske verwendet wird (dies kann in verschiedenen Weisen einschließlich der Verwendung einer Schreibmaske, die mit allen festverdrahtet ist, oder Hardware, die die Maskierungs-Hardware umgeht, implementiert sein).
  • Das echte Opcode-Feld 3130 (das Byte 4) ist außerdem als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 3140 (das Byte 5) enthält das MOD-Feld 3142, das Reg-Feld 3144 und das R/M-Feld 3146. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Feldes 3142 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Feldes 3144 kann in zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden oder kann als eine Opcode-Erweiterung behandelt werden und nicht verwendet werden, um irgendeinen Befehlsoperanden zu codieren. Die Rolle des R/M-Feldes 3146 kann das Folgende enthalten: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Maßstab-, Index-, Basis- (SIB-) Byte (das Byte 6) - Wie vorher beschrieben worden ist, wird der Inhalt des Maßstabfeldes 3050 für die Speicheradressenerzeugung verwendet. Das SIB.xxx 3154 und das SIB.bbb 3156 - auf die Inhalte dieser Felder ist vorher bezüglich der Registerindizes Xxxx und Bbbb verwiesen worden.
  • Verschiebungsfeld 3062A (die Bytes 7-10) - wenn das MOD-Feld 3142 10 enthält, sind die Bytes 7-10 das Verschiebungsfeld 3062A, wobei es gleich wie die Alt-32-Bit-Verschiebung (disp32) arbeitet und auf Byte-Granularität arbeitet.
  • Verschiebungsfaktorfeld 3062B (das Byte 7) - wenn das MOD-Feld 3142 01 enthält, ist das Byte 7 das Verschiebungsfaktorfeld 3062B. Der Ort dieses Feldes ist der gleiche wie der der 8-Bit-Verschiebung (disp8) des Alt-x86-Befehlssatzes, die auf Byte-Granularität arbeitet. Weil die disp8 vorzeichenerweitert ist, kann sie nur zwischen -128- und 127-Byte-Versätzen adressieren; hinsichtlich von 64-Byte-Cache-Zeilen verwendet die disp8 8 Bits, die auf nur vier wirklich nützliche Werte -128, -64, 0 und 64 gesetzt werden können; weil oft ein größerer Bereich benötigt wird, wird die disp32 verwendet; die disp32 erfordert jedoch 4 Bytes. Im Gegensatz zur disp8 und zur disp32 ist das Verschiebungsfaktorfeld 3062B eine Neuinterpretation der disp8; wenn das Verschiebungsfaktorfeld 3062B verwendet wird, ist die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfeldes multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ der Verschiebung wird als disp8 * N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine derartige komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist, wobei folglich die redundanten Bits niedriger Ordnung des Adressenversatzes nicht codiert werden müssen. Mit anderen Worten, das Verschiebungsfaktorfeld 3062B ersetzt die 8-Bit-Verschiebung des Altx86-Befehlssatzes. Folglich ist das Verschiebungsfaktorfeld 3062B in der gleichen Weise wie eine 8-Bit-Verschiebung des x86-Befehlssatzes codiert (daher keine Änderungen der ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass die disp8 zur disp8 * N überladen wird. Mit anderen Worten, es gibt keine Änderungen der Codierungsregeln oder der Codierungslängen, sondern nur in der Interpretation des Verschiebungswertes durch die Hardware (die die Verschiebung mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten). Das Sofortfeld 3072 arbeitet so, wie vorher beschrieben worden ist.
  • Vollständiges Opcode-Feld
  • 31B ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 3100 veranschaulicht, die das vollständige Opcode-Feld 3074 gemäß einer Ausführungsform der Offenbarung bilden. Spezifisch enthält das vollständige Opcode-Feld 3074 das Formatfeld 3040, das Basisoperationsfeld 3042 und das Datenelementbreitenfeld (W) 3064. Das Basisoperationsfeld 3042 enthält das Präfixcodierungsfeld 3125, das Opcode-Abbildungsfeld 3115 und das echte Opcode-Feld 3130.
  • Registerindexfeld
  • 3 IC ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 3100 veranschaulicht, die das Registerindexfeld 3044 gemäß einer Ausführungsform der Offenbarung bilden. Spezifisch enthält das Registerindexfeld 3044 das REX-Feld 3105, das REX'-Feld 3110, das MODR/M.reg-Feld 3144, das MODR/M.r/m-Feld 3146, das VVVV-Feld 3120, das xxx-Feld 3154 und das bbb-Feld 3156.
  • Vergrößerungsoperationsfeld
  • 31D ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 3100 veranschaulicht, die das Vergrößerungsoperationsfeld 3050 gemäß einer Ausführungsform der Offenbarung bilden. Wenn das Klassenfeld (U) 3068 0 enthält, bedeutet es EVEX.U0 (Klasse A 3068A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 3068B). Wenn U = 0 und das MOD-Feld 3142 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird das Alphafeld 3052 (das EVEX-Byte 3, das Bit [7] - EH) als das rs-Feld 3052A interpretiert. Wenn das rs-Feld 3052A eine 1 enthält (das Runden 3052A.1), wird das Betafeld 3054 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Rundensteuerfeld 3054A interpretiert. Das Rundensteuerfeld 3054A enthält ein Ein-Bit-SAE-Feld 3056 und ein Zwei-Bit-Rundenoperationsfeld 3058. Wenn das rs-Feld 3052A eine 0 enthält (die Datentransformation 3052A.2), wird das Betafeld 3054 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 3054B interpretiert. Wenn U = 0 und das MOD-Feld 3142 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Alphafeld 3052 (das EVEX-Byte 3, das Bit [7] - EH) als das Räumungshinweisfeld (EH) 3052B interpretiert und wird das Betafeld 3054 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datenmanipulationsfeld 3054C interpretiert.
  • Wenn U = 1, wird das Alphafeld 3052 das (EVEX-Byte 3, das Bit [7] - EH) als das Schreibmasken-Steuerfeld (Z) 3052C interpretiert. Wenn U = 1 und das MOD-Feld 3142 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird ein Teil des Betafeldes 3054 (das EVEX-Byte 3, das Bit [4] - So) als das RL-Feld 3057A interpretiert; wenn es eine 1 enthält (das Runden 3057A.1), wird der Rest des Betafeldes 3054 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Rundenoperationsfeld 3059A interpretiert, während, wenn das RL-Feld 3057A eine 0 enthält (VSIZE 3057.A2), der Rest des Betafeldes 3054 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Vektorlängenfeld 3059B (das EVEX-Byte 3, das Bit [6-5] - L1-0) interpretiert wird. Wenn U = 1 und das MOD-Feld 3142 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Betafeld 3054 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Vektorlängenfeld 3059B (das EVEX-Byte 3, das Bit [6-5] - L1-0) und das Rundsendefeld 3057B (das EVEX-Byte 3, das Bit [4] - B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 32 ist ein Blockschaltplan einer Registerarchitektur 3200 gemäß einer Ausführungsform der Offenbarung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 3210, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register sind den Registern ymm0-16 überlagert. Die 128 Bits niedriger Ordnung der unteren 16 zmm-Register (die 128 Bits niedriger Ordnung der ymm-Register) sind den Registern xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 3100 wirkt auf diese überlagerte Registerdatei so, wie in den Tabellen im Folgenden veranschaulicht ist.
    Einstellbare Vektorlänge Klasse Operationen Register
    A (30A; U = 0) 3010, 3015, 3025, 3030 zmm-Register (die Vektorlänge ist 64 Bytes)
    Befehlsschablonen, die das Vektorlängenfeld 3059B nicht enthalten B (30B; U = 1) 3012 zmm-Register (die Vektorlänge ist 64 Bytes)
    Befehlsschablonen, die das Vektorlängenfeld 3059B enthalten B (30B; U = 1) 3017, 3027 zmm-, ymm- oder xmm-Register (die Vektorlänge ist in Abhängigkeit vom Vektorlängenfeld 3059B 64 Bytes, 32 Bytes oder 16 Bytes)
  • Mit anderen Worten, das Vektorlängenfeld 3059B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen aus, wobei jede derartige kürzere Länge die Hälfte der Länge der vorhergehenden Länge ist; wobei die Befehlsschablonen ohne das Vektorlängenfeld 3059B auf die maximale Vektorlänge wirken. Ferner arbeiten in einer Ausführungsform die Befehlsschablonen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 3100 auf gepackte oder skalare Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackte oder skalare Ganzzahldaten. Die Skalaroperationen sind Operationen, die an der Datenelementposition niedrigster Ordnung in einem zmm/ymm/xmm-Register ausgeführt werden; die Datenelementpositionen höherer Ordnung werden in Abhängigkeit von der Ausführungsform entweder als die gleichen gelassen, die sie vor dem Befehl waren, oder auf null gesetzt.
  • Schreibmaskenregister 3215 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jedes mit einer Größe von 64 Bits. In einer alternativen Ausführungsform weisen die Schreibmaskenregister 3215 eine Größe von 16 Bits auf. Wie vorher beschrieben worden ist, kann in einer Ausführungsform der Offenbarung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie die festverdrahtete Schreibmaske 0xFFFF aus, die die Schreibmaskierung für diesen Befehl effektiv sperrt.
  • Universalregister 3225 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um die Speicheroperanden zu adressieren. Auf diese Register wird durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 verwiesen.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 3245, die sonst die gepackte MMX-Ganzzahl-Flachregisterdatei 3250 genannt wird - in der veranschaulichten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der verwendet wird, um skalare Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen; während die MMX-Register verwendet werden, um sowohl Operationen an gepackten 64-Bit-Ganzzahldaten auszuführen als auch Operanden für einige Operationen, die zwischen den MMX- und den XMM-Registern ausgeführt werden, zu halten.
  • Alternative Ausführungsformen der Offenbarung können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Offenbarung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Die Prozessorkerne können in verschiedenen Weisen, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert sein. Die Implementierungen derartiger Kerne können z. B. Folgendes enthalten: 1) einen In-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 2) einen Hochleistungs-Out-of-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für Graphik und/oder wissenschaftliche Berechnung (Durchsatzberechnung) vorgesehen ist. Die Implementierungen der verschiedenen Prozessoren können Folgendes enthalten: 1) eine CPU, die einen oder mehrere In-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, und/oder einen oder mehrere Out-of-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, enthält; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind. Derartige verschiedene Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes enthalten können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem separaten Die in derselben Baugruppe wie eine CPU; 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein derartiger Coprozessor manchmal als eine Speziallogik, wie z. B. eine integrierte Graphik und/oder eine wissenschaftliche Logik (Durchsatzlogik), oder als Spezialkerne bezeichnet wird); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (die manchmal als der (die) Anwendungskern(e) oder der (die) Anwendungsprozessor(en) bezeichnet wird), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von den Beschreibungen der beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Blockschaltplan eines In-Order- und Out-of-Order-Kerns
  • 33A ist ein Blockschaltplan, der sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Out-of Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß den Ausführungsformen der Offenbarung veranschaulicht. 33B ist ein Blockschaltplan, der eine beispielhafte Ausführungsform sowohl eines Kerns einer In-Order-Architektur als auch eines beispielhaften Kerns einer Out-of-Order-Ausgabe-/Ausführungsarchitektur mit Registerumbenennung veranschaulicht, die in einem Prozessor gemäß den Ausführungsformen der Offenbarung enthalten sind. Die Kästen mit durchgezogenen Linien in den 33A-B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der Kästen mit den gestrichelten Linien die Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung und den Out-of-Order-Ausgabe-/ Ausführungskern mit Registerumbenennung veranschaulichen. In Anbetracht dessen, dass der In-Order-Aspekt eine Teilmenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 33A enthält eine Prozessorpipeline 3300 eine Holstufe 3302, eine Längendecodierstufe 3304, eine Decodierstufe 3306, eine Zuweisungsstufe 3308, eine Umbenennungsstufe 3310, eine Planungsstufe (die außerdem als eine Abfertigungs- oder Ausgabestufe bezeichnet wird) 3312, eine Registerlese-/Speicherlesestufe 3314, eine Ausführungsstufe 3316, eine Rückschreib-/Speicherschreibstufe 3318, eine Ausnahmebehandlungsstufe 3322 und eine Einspeicherungsstufe 3324.
  • 33B zeigt einen Prozessorkern 3390, der eine Front-End-Einheit 3330 enthält, die an eine Ausführungsmaschineneinheit 3350 gekoppelt ist, wobei beide an eine Speichereinheit 3370 gekoppelt sind. Der Kern 3390 kann ein Kern mit Berechnung mit verringertem Befehlssatz (RISC-Kern), ein Kern mit Berechnung mit komplexem Befehlssatz (CISC-Kern), ein Kern mit sehr langen Befehlswörtern (VLIW-Kern) oder ein hybrider oder alternativer Kerntyp sein. Als eine noch weitere Option kann der Kern 3390 ein Spezialkern sein, wie z. B. ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Universalberechnungs-Graphikverarbeitungseinheits-Kern (GPGPU-Kern), ein Graphikkern oder dergleichen, sein.
  • Die Front-End-Einheit 3330 enthält eine Verzweigungsvorhersageeinheit 3332, die an eine Befehls-Cache-Einheit 3334 gekoppelt ist, die an einen Befehls-Adressenübersetzungspuffer (TLB) 3336 gekoppelt ist, der an eine Befehlsholeinheit 3338 gekoppelt ist, die an eine Decodiereinheit 3340 gekoppelt ist. Die Decodiereinheit 3340 (z. B. die Decodierschaltung) kann Befehle (z. B. Makrobefehle) decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen decodiert werden oder die ursprünglichen Befehle anderweitig widerspiegeln oder aus den ursprünglichen Befehlen abgeleitet werden. Die Decodiereinheit 3340 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein. Beispiele geeigneter Mechanismen enthalten Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Festwertspeicher (Mikrocode-ROMs) usw., sind aber nicht darauf eingeschränkt. In einer Ausführungsform enthält der Kern 3390 einen Mikrocode-ROM oder ein anderes Medium, der bzw. das Mikrocode für bestimmte Makrobefehle speichert, (z. B. in der Decodiereinheit 3340 oder anderweitig innerhalb der Front-End-Einheit 3330). Die Decodiereinheit 3340 ist an eine Umbenennungs-/Zuweisereinheit 3352 in der Ausführungsmaschineneinheit 3350 gekoppelt.
  • Die Ausführungsmaschineneinheit 3350 enthält eine Umbenennungs-/Zuweisereinheit 3352, die an eine Stilllegungseinheit 3354 und an einen Satz von einer oder mehreren Scheduler-Einheit(en) 3356 gekoppelt ist. Die Scheduler-Einheit(en) 3356 repräsentiert (repräsentieren) irgendeine Anzahl unterschiedlicher Scheduler, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Scheduler-Einheit(en) 3356 ist (sind) an die Einheit(en) 3358 der physischen Registerdatei(en) gekoppelt. Jede der Einheiten 3358 der physischen Registerdatei(en) repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen, wie z. B. skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw., speichern. In einer Ausführungsform umfasst die Einheit 3358 der physischen Registerdatei(en) eine Vektorregistereinheit, eine Schreibmasken-Registereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit(en) 3358 der physischen Registerdatei(en) ist (sind) durch die Stilllegungseinheit 3354 überlappt, um die verschiedenen Arten zu veranschaulichen, auf denen die Registerumbenennung und die Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung eines Umordnungspuffers (von Umordnungspuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung einer Zukunftsdatei(en), eines Historiepuffers (von Historiepuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung von Registerabbildungen und einem Pool von Registern; usw.). Die Stilllegungseinheit 3354 und die Einheit(en) 3358 der physischen Registerdatei(en) sind an den (die) Ausführungs-Cluster 3360 gekoppelt. Der (die) Ausführungs-Cluster 3360 enthält (enthalten) einen Satz von einer oder mehreren Ausführungseinheiten 3362 (z. B. Ausführungsschaltungen) und einen Satz von einer oder mehreren Speicherzugriffseinheiten 3364. Die Ausführungseinheiten 3362 können verschiedene Operationen (z. B. Verschiebungen, eine Addition, eine Subtraktion, eine Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle alle Funktionen ausführen, enthalten. Die Scheduler-Einheit(en) 3356, die Einheit(en) 3358 der physikalischen Registerdatei(en) und der (die) Ausführungs-Cluster 3360 sind als möglicherweise mehrere gezeigt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Datentypen/Operationen erzeugen (z. B. eine skalare Ganzzahlpipeline, eine skalare Gleitkomma-/gepackte Ganzzahl-/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkommapipeline und/oder eine Speicherzugriffspipeline, die jede ihre eigene Scheduler-Einheit, ihre eigene Einheit der physikalischen Registerdatei(en) und/oder ihren eigenen Ausführungs-Cluster aufweisen - wobei im Fall einer separaten Speicherzugriffspipeline bestimmte Ausführungsformen implementiert sind, in denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 3364 aufweist). Es sollte außerdem erkannt werden, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe/Ausführung und der Rest In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 3364 ist an die Speichereinheit 3370 gekoppelt, die eine Daten-TLB-Einheit 3372 enthält, die an eine Daten-Cache-Einheit 3374 gekoppelt ist, die an eine Ebene 2-Cache-Einheit (L2-Cache-Einheit) 3376 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 3364 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, von denen jede an die Daten-TLB-Einheit 3372 in der Speichereinheit 3370 gekoppelt ist. Die Befehls-Cache-Einheit 3334 ist ferner an eine Ebene 2-Cache-Einheit (L2-Cache-Einheit) 3376 in der Speichereinheit 3370 gekoppelt. Die L2-Cache-Einheit 3376 ist an eine oder mehrere andere Ebenen des Cache und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielhaft kann die beispielhafte Out-of-Order-Ausgabe-/Ausführungskernarchitektur mit Registerumbenennung die Pipeline 3300 wie folgt implementieren: 1) das Befehlsholen 3338 führt die Hol- und Längendecodierstufen 3302 und 3304 aus; 2) die Decodiereinheit 3340 führt die Decodierstufe 3306 aus; 3) die Umbenennungs-/Zuweisereinheit 3352 führt die Zuweisungsstufe 3308 und die Umbenennungsstufe 33 10 aus; 4) die Scheduler-Einheit(en) 3356 führt (führen) die Planungsstufe 3312 aus; 5) die Einheit(en) 3358 der physischen Registerdatei(en) und die Speichereinheit 3370 führen die Registerlese-/Speicherlesestufe 3314 aus; der Ausführungs-Cluster 3360 führt die Ausführungsstufe 3316 aus; 6) die Speichereinheit 3370 und die Einheit(en) 3358 der physischen Registerdatei(en) führen die Rückschreib-/Speicherschreibstufe 3318 aus; 7) in die Ausnahmebehandlungsstufe 3322 können verschiedene Einheiten einbezogen sein; und 8) die Stilllegungseinheit 3354 und die Einheit(en) 3358 der physischen Registerdatei(en) führen die Einspeicherungsstufe 3324 aus.
  • Der Kern 3390 kann einen oder mehrere Befehlssätze (z. B. den x86 Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technolgies of Sunnyvale, CA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings of Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e) unterstützen. In einer Ausführungsform enthält der Kern 3390 eine Logik, um eine Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) zu unterstützen, wobei dadurch die Operationen erlaubt werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten auszuführen sind.
  • Es sollte erkannt werden, dass der Kern Multithreading (die Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies in verschiedenen Weisen einschließlich des Zeitscheiben-Multithreading, des gleichzeitigen Multithreading (wo ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physische Kern das gleichzeitige Multithreading ausführt) oder einer Kombination daraus (z. B. das Zeitscheiben-Holen und -Decodieren und danach das gleichzeitige Multithreading, wie z. B. in der Intel®-Hyper-Threading-Technik) ausführen kann.
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, sollte erkannt werden, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors außerdem separate Befehls- und Daten-Cache-Einheiten 3334/3374 und eine gemeinsam benutzte L2-Cache-Einheit 3376 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten, wie z. B. einen internen Ebene 1-Cache (L1 -Cache), oder mehrere Ebenen des internen Caches aufweisen. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich alles des Caches außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • Die 34A-B veranschaulichen einen Blockschaltplan einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip sein würde. Die Logikblöcke kommunizieren in Abhängigkeit von der Anwendung durch ein Zusammenschaltungsnetz (z. B. ein Ringnetz) mit hoher Bandbreite mit irgendeiner Logik mit fester Funktion, Speicher-E/A-Schnittstellen und einer anderen notwendigen E/A-Logik.
  • 34A ist ein Blockschaltplan eines einzigen Prozessorkerns zusammen mit seiner Verbindung zu dem Zusammenschaltungsnetz 3402 auf dem Die und mit seiner lokalen Teilmenge des Ebene 2-Caches (L2-Caches) 3404 gemäß den Ausführungsformen der Offenbarung. In einer Ausführungsform unterstützt eine Befehlsdecodiereinheit 3400 den x86-Befehlssatz mit der Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 3406 erlaubt Zugriffe mit geringer Latenzzeit auf den Cache-Speicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (um den Entwurf zu vereinfachen) eine Skalareinheit 3408 und eine Vektoreinheit 3410 getrennte Registersätze (Skalarregister 3412 bzw. Vektorregister 3414) verwenden und die zwischen ihnen übertragenen Daten in den Speicher geschrieben werden und dann von einem Ebene 1-Cache (L1-Cache) 3406 zurückgelesen werden, können alternative Ausführungsformen der Offenbarung eine andere Herangehensweise verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationsweg enthalten, der es ermöglicht, dass die Daten zwischen den zwei Registerdateien übertragen werden, ohne dass sie geschrieben und zurückgelesen werden).
  • Die lokale Teilmenge des L2-Caches 3404 ist ein Teil eines globalen L2-Caches, der in getrennte lokale Teilmengen, eine pro Prozessorkern, aufgeteilt ist. Jeder Prozessorkern weist einen direkten Zugangsweg zu seiner eigenen lokalen Teilmenge des L2-Cache 3404 auf. Die durch einen Prozessorkern gelesenen Daten werden in seiner L2-Cache-Teilmenge 3404 gespeichert, wobei parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, schnell auf sie zugegriffen werden kann. Die durch einen Prozessorkern geschriebenen Daten werden in seiner eigenen L2-Cache-Teilmenge 3404 gespeichert und werden bei Bedarf aus anderen Teilmengen geleert. Das Ringnetz stellt die Kohärenz für die gemeinsam benutzten Daten sicher. Das Ringnetz ist bidirektional, um es den Agenten, wie z. B. den Prozessorkernen, den L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenweg ist pro Richtung 1012 Bits breit.
  • 34B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 34A gemäß den Ausführungsformen der Offenbarung. 34B enthält sowohl einen LI-Daten-Cache-Teil 3406A des L1-Caches 3404 als auch weitere Einzelheiten hinsichtlich der Vektoreinheit 3410 und der Vektorregister 3414. Spezifisch ist die Vektoreinheit 3410 eine 16 breite Vektorverarbeitungseinheit (VPU) (siehe die 16 breite ALU 3428), die einen oder mehrere der Ganzzahlbefehle, Gleitkommabefehle in einfacher Genauigkeit und Gleitkommabefehle in doppelter Genauigkeit ausführt. Die VPU unterstützt das „Swizzling“ der Registereingaben mit der „Swizzle“-Einheit 3420, die numerische Umsetzung mit den numerischen Umsetzungseinheiten 3422A-B und die Replikation mit der Replikationseinheit 3424 an der Speichereingabe. Die Schreibmaskenregister 3426 erlauben das Aussagen der resultierenden Vektorschreibvorgänge.
  • 35 ist ein Blockschaltplan eines Prozessors 3500, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß den Ausführungsformen der Offenbarung. Die Kästen mit durchgezogenen Linien in 35 veranschaulichen einen Prozessor 3500 mit einem einzigen Kern 3502A, einem Systemagenten 3510, einem Satz von einer oder mehreren Bus-Controller-Einheiten 3516, während die optionale Ergänzung der Kästen mit den gestrichelten Linien einen alternativen Prozessor 3500 mit mehreren Kernen 3502A-N, einem Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 3514 in der Systemagenteneinheit 3510 und einer Speziallogik 3508 veranschaulicht.
  • Folglich können verschiedene Implementierungen des Prozessors 3500 Folgendes enthalten: 1) eine CPU mit der Speziallogik 3508, die eine integrierte Graphik- und/oder wissenschaftliche Logik (Durchsatzlogik) ist (die einen oder mehrere Kerne enthalten kann), wobei die Kerne 3502A-N ein oder mehrere Universalkerne (z. B. In-Order-Universalkerne, Out-of-Order-Universalkerne, eine Kombination aus den beiden) sind; 2) einen Coprozessor mit den Kernen 3502A-N, die eine große Anzahl von Spezialkernen sind, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor mit den Kernen 3502A-N, die eine große Anzahl von In-Order-Universalkernen sind. Folglich kann der Prozessor 3500 ein Universalprozessor, ein Coprozessor oder ein Spezialprozessor, wie z. B. ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU (eine Universal-Graphikverarbeitungseinheit), ein Coprozessor mit vielen integrierten Kernen (MIC-Coprozessor) mit hohem Durchsatz (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann in einem oder mehreren Chips implementiert sein. Der Prozessor 3500 kann ein Teil eines oder mehrerer Substrate sein und/oder unter Verwendung irgendeiner von einer Anzahl von Prozesstechniken, wie z. B. BiCMOS, CMOS oder NMOS, in einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie enthält eine oder mehrere Ebenen des Caches innerhalb der Kerne, einen Satz aus einer oder mehreren gemeinsam benutzten Cache-Einheiten 3506 und einen (nicht gezeigten) externen Speicher, der an den Satz von integrierten Speicher-Controller-Einheiten 3514 gekoppelt ist. Der Satz gemeinsam benutzter Cache-Einheiten 3506 kann einen oder mehrere Caches mittlerer Ebene, wie z. B. der Ebene 2 (L2), der Ebene 3 (L3), der Ebene 4 (L4) oder anderer Ebenen des Caches, einen Cache der letzten Ebene (LLC) und/oder Kombinationen daraus enthalten. Während in einer Ausführungsform eine ringbasierte Zusammenschaltungseinheit 3512 die integrierte Graphiklogik 3508, den Satz gemeinsam benutzter Cache-Einheiten 3506 und die Systemagenteneinheit 3510/die integrierten Speicher-Controller-Einheit(en) 3514 miteinander verbindet, können alternative Ausführungsformen irgendeine Anzahl wohlbekannter Techniken verwenden, um derartige Einheiten miteinander zu verbinden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 3506 und den Kernen 3502-A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrerer der Kerne 3502A-N zum Multi-Threading imstande. Der Systemagent 3510 enthält jene Komponenten, die die Kerne 3502A-N koordinieren und betreiben. Die Systemagenteneinheit 3510 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann die Logik und die Komponenten sein oder die Logik und die Komponenten enthalten, die benötigt werden, um den Leistungszustand der Kerne 3502A-N und der integrierte Graphiklogik 3508 zu regeln. Die Anzeigeeinheit dient dem Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 3502A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; d. h., zwei oder mehr der Kerne 3502A-N können zur Ausführung des gleichen Befehlssatzes imstande sein, während andere zum Ausführen nur einer Teilmenge dieses Befehlssatzes oder eines anderen Befehlssatzes imstande sein können.
  • Beispielhafte Computerarchitekturen
  • Die 36-39 sind Blockschaltpläne beispielhafter Computerarchitekturen. Andere Systementwürfe und -konfigurationen, die in den Techniken für Laptops, Desktops, handgehaltene PCs, persönliche digitale Assistenten, Entwicklungs-Arbeitsplatzrechner, Server, Netzvorrichtungen, Netz-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Graphikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxes, Mikrocontroller, Mobiltelephone, tragbare Medienspieler, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind außerdem geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die einen Prozessor und/oder eine andere Ausführungslogik umfassen können, wie sie hier offenbart sind, im Allgemeinen geeignet.
  • In 36 ist ein Blockschaltplan eines Systems 3600 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Das System 3600 kann einen oder mehrere Prozessoren 3610, 3615 enthalten, die an einen Controller-Hub 3620 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 3620 einen Graphikspeicher-Controller-Hub (GMCH) 3690 und einen Eingabe/Ausgabe-HUB (EAH) 3650 (die sich auf getrennten Chips befinden können); wobei der GMCH 3690 Speicher- und Graphik-Controller enthält, an die ein Speicher 3640 und ein Coprozessor 3645 gekoppelt sind; wobei der EAH 3650 die Eingabe/Ausgabe-Vorrichtungen (E/A-Vorrichtungen) 3660 an den GMCH 3690 koppelt. Alternativ sind einer oder beide des Speicher- und Graphik-Controllers innerhalb des Prozessors integriert (wie hier beschrieben ist), sind der Speicher 3640 und der Coprozessor 3645 direkt an den Prozessor 3610 gekoppelt und befindet sich der Controller-HUB 3620 in einem einzigen Chip mit dem EAH 3650. Der Speicher 3640 kann z. B. einen Matrixbeschleunigungscode 3640A enthalten, der Code speichert, der, wenn er ausgeführt wird, einen Prozessor veranlasst, irgendein Verfahren dieser Offenbarung auszuführen.
  • Die optionale Art der zusätzlichen Prozessoren 3615 ist in 36 mit gestrichelten Linien angegeben. Jeder Prozessor 3610, 3615 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann irgendeine Version des Prozessors 3500 sein.
  • Der Speicher 3640 kann z. B. ein dynamischer Schreib-Lese-Speicher (DRAM), ein Phasenänderungsspeicher (PCM) oder eine Kombination aus den beiden sein. Für wenigstens eine Ausführungsform kommuniziert der Controller-Hub 3620 über einen Bus mit mehreren Stationen, wie z. B. einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. eine Quickpath Interconnect (QPI), oder eine ähnliche Verbindung 3695 mit dem (den) Prozessor(en) 3610, 3615.
  • In einer Ausführungsform ist der Coprozessor 3645 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 3620 einen integrierten Graphikbeschleuniger enthalten.
  • Es kann verschiedene Unterschiede zwischen den physischen Betriebsmitteln 3610, 3615 hinsichtlich eines Spektrums der Metriken der Vorzüge einschließlich der Architektur, Mikroarchitektur, thermischen und Leistungsaufnahmeeigenschaften und dergleichen geben.
  • In einer Ausführungsform führt der Prozessor 3610 Befehle aus, die die Datenverarbeitungsseparation eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 3610 erkennt diese Coprozessorbefehle als ein Typ, der durch den beigefügten Coprozessor 3645 ausgeführt werden sollte. Entsprechend gibt der Prozessor 3610 diese Coprozessorbefehle (oder Steuersignale, die die Coprozessorbefehle repräsentieren) auf einem Coprozessor-Bus oder einer anderen Zusammenschaltung zu dem Coprozessor 3645 aus. Der (die) Coprozessor(en) 3645 akzeptiert (akzeptieren) die empfangenen Coprozessorbefehle und führt (führen) sie aus.
  • In 37 ist ein Blockschaltplan eines ersten spezifischeren beispielhaften Systems 3700 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Wie in 37 gezeigt ist, ist das Mehrprozessorsystem 3700 ein Punkt-zu-Punkt-Zusammenschaltungssystem, wobei es einen ersten Prozessor 3770 und einen zweiten Prozessor 3780 enthält, die über eine Punkt-zu-Punkt-Zusammenschaltung 3750 gekoppelt sind. Jeder der Prozessoren 3770 und 3780 kann irgendeine Version des Prozessors 3500 sein. In einer Ausführungsform der Offenbarung sind die Prozessoren 3770 und 3780 die Prozessoren 3610 bzw. 3615, während der Coprozessor 3738 der Coprozessor 3645 ist. In einer weiteren Ausführungsform sind die Prozessoren 3770 und 3780 der Prozessor 3610 bzw. der Coprozessor 3645.
  • Es ist gezeigt, dass die Prozessoren 3770 und 3780 die integrierten Speicher-Controller-Einheiten (IMC-Einheiten) 3772 bzw. 3782 enthalten. Der Prozessor 3770 enthält außerdem als einen Teil seiner Bus-Controller-Einheiten die Punkt-zu-Punkt-Schnittstellen (P-P-Schnittstellen) 3776 und 3778; ähnlich enthält der zweite Prozessor 3780 die P-P-Schnittstellen 3786 und 3788. Die Prozessoren 3770, 3780 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P-Schnittstelle) 3750 unter Verwendung der P-P-Schnittstellenschaltungen 3778, 3788 austauschen. Wie in 37 gezeigt ist, koppeln die IMCs 3772 und 3782 die Prozessoren an entsprechende Speicher, nämlich einen Speicher 3732 und einen Speicher 3734, die Teile des Hauptspeichers sein können, die lokal mit den jeweiligen Prozessoren verbunden sind.
  • Die Prozessoren 3770, 3780 können jeder Informationen über die einzelnen P-P-Schnittstellen 3752, 3754 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 3776, 3794, 3786, 3798 mit einem Chipsatz 3790 austauschen. Der Chipsatz 3790 kann optional Informationen über eine Hochleistungsschnittstelle 3739 mit dem Coprozessor 3738 austauschen. In einer Ausführungsform ist der Coprozessor 3738 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • In jedem Prozessor oder außerhalb der beiden Prozessoren kann ein (nicht gezeigter) gemeinsam benutzter Cache enthalten sein, der dennoch über die P-P-Zusammenschaltung mit den Prozessoren verbunden ist, so dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam benutzten Cache gespeichert sein können, falls ein Prozessor in eine Kleinleistungsbetriebsart gesetzt ist.
  • Der Chipsatz 3790 kann über eine Schnittstelle 3796 an einen ersten Bus 3716 gekoppelt sein. In einer Ausführungsform kann der erste Bus 3716 ein Peripheriekomponenten-Verbindungsbus (PCI-Bus) oder ein Bus, wie z. B. ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation, sein, obwohl der Schutzumfang der vorliegenden Offenbarung nicht so eingeschränkt ist.
  • Wie in 37 gezeigt ist, können verschiedene E/A-Vorrichtungen 3714 zusammen mit einer Busbrücke 3718, die den ersten Bus 3716 an einen zweiten Bus 3720 koppelt, an den ersten Bus 3716 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 3715, wie z. B. Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Graphikbeschleuniger oder digitale Signalverarbeitungseinheiten (DSP-Einheiten)), feldprogrammierbare Gatteranordnungen oder irgendein anderer Prozessor an den ersten Bus 3716 gekoppelt. In einer Ausführungsform kann der zweite Bus 3720 ein Bus mit geringer Pinanzahl (LPC-Bus) sein. In einer Ausführungsform können verschiedene Vorrichtungen an den zweiten Bus 3720 gekoppelt sein, einschließlich z. B. einer Tastatur und/oder einer Maus 3722, der Kommunikationsvorrichtungen 3727 und einer Speichereinheit 3728, wie z. B. eines Plattenlaufwerks oder einer anderen Massenspeichervorrichtung, die Befehle/Code und Daten 3730 enthalten kann. Ferner kann eine Audio-E/A 3724 an den zweiten Bus 3720 gekoppelt sein. Es wird angegeben, dass andere Architekturen möglich sind. Anstelle der Punkt-zu-Punkt-Architektur nach 37 kann das System einen Bus mit mehreren Stationen oder eine andere derartige Architektur implementieren.
  • In 38 ist ein Blockschaltplan eines zweiten spezifischeren beispielhaften Systems 3800 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Gleiche Elemente in den 37 und 38 tragen gleiche Bezugszeichen, wobei bestimmte Aspekte nach 37 aus 38 weggelassen worden sind, um das Verbergen der anderen Aspekte nach 38 zu vermeiden.
  • 38 veranschaulicht, dass die Prozessoren 3770, 3780 eine integrierte Speicher- und E/A-Steuerlogik („CL“) 3772 bzw. 3782 enthalten können. Folglich enthalten die CL 3772, 3782 die integrierten Speicher-Controller-Einheiten und eine E/A-Steuerlogik. 38 veranschaulicht, dass nicht nur die Speicher 3732, 3734 an die CL 3772, 3782 gekoppelt sind, sondern dass die E/A-Vorrichtungen 3814 außerdem an die Steuerlogik 3772, 3782 gekoppelt sind. Die Alt-E/A-Vorrichtungen 3815 sind an den Chipsatz 3790 gekoppelt.
  • In 39 ist ein Blockschaltplan eines SoC 3900 gemäß einer Ausführungsform der vorliegenden Offenbarung gezeigt. Ähnliche Elemente in 35 tragen gleiche Bezugszeichen. Außerdem sind die Kästen mit gestrichelten Linien optionale Merkmale in weiterentwickelteren SoCs. In 39 ist (sind) eine Zusammenschaltungseinheit(en) 3902 an Folgendes gekoppelt: einen Anwendungsprozessor 3910, der einen Satz von einem oder mehreren Kernen 202A-N und gemeinsam benutzte Cache-Einheit(en) 3506 enthält; eine Systemagenteneinheit 3510; eine Bus-Controller-Einheit(en) 3516; eine integrierte Speicher-Controller-Einheit(en) 3514; einen Satz von einem oder mehreren Coprozessoren 3920, der eine integrierte Graphiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; eine statische Schreib-Lese-Speicher-Einheit (SRAM-Einheit) 3930; eine Speicherdirektzugriffseinheit (DMA-Einheit) 3932; und eine Anzeigeeinheit 3940 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform enthält (enthalten) der (die) Coprozessor(en) 3920 einen Spezialprozessor, wie z. B. einen Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Die hier offenbarten Ausführungsformen (z. B. der Mechanismen) können in Hardware, Software, Firmware oder einer Kombination derartiger Implementierungsherangehensweisen implementiert sein. Die Ausführungsformen der Offenbarung können als Computer-Programme oder Programmcode, die in programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und/oder nichtflüchtiger Datenspeicher- und/oder Speicherelemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen, implementiert sein.
  • Der Programmcode, wie z. B. der in 37 veranschaulichte Code 3730, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Anmeldung enthält das Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie z. B. einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine Anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen Programmiersprache oder einer objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auf Wunsch außerdem in einer Assembler- oder Maschinensprache implementiert sein. In der Tat sind die hier beschriebenen Mechanismen im Schutzumfang nicht auf irgendeine spezielle Programmiersprache eingeschrä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 sein, die in einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, die, wenn sie durch eine Maschine gelesen werden, die Maschine veranlassen, eine Logik herzustellen, um die hier beschriebenen Techniken auszuführen. Derartige Darstellungen, die als „IP-Kerne“ bekannt sind, können in einem greifbaren maschinenlesbaren Medium gespeichert sein und können verschiedenen Kunden oder Herstellungseinrichtungen geliefert werden, um sie in die Fertigungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich bilden.
  • Derartige maschinenlesbare Speichermedien können ohne Einschränkung nicht transitorische greifbare Anordnungen von Herstellungsartikeln enthalten oder durch eine Maschine oder eine Vorrichtung gebildet sein, einschließlich Speichermedien wie z. B. Festplatten, irgendeines anderen Typs von Platten einschließlich Disketten, optischer Platten, Kompaktplatten-Festwertspeichern (CD-ROMs), wiederbeschreibbarer Kompaktplatten (CD-RWs) und magneto-optischer Platten, Halbleitervorrichtungen, wie z. B. Festwertspeichern (ROMs), Schreib-Lese-Speichern (RAMs), wie z. B. dynamischer Schreib-Lese-Speicher (DRAMs), statischer Schreib-Lese-Speicher (SRAMs), löschbarer programmierbarer Festwertspeicher (EPROMs), Flash-Speichern, elektrisch löschbarer programmierbarer Festwertspeicher (EEPROMs), Phasenänderungsspeichern (PCM), magnetischer oder optischer Karten oder irgendeines anderen Typs der Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend enthalten die Ausführungsformen der Offenbarung außerdem nicht transitorische greifbare maschinenlesbaren Medien, die Befehle enthalten oder Entwurfsdaten enthalten, wie z. B. eine Hardware-Beschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die hier beschrieben sind, definieren. Derartige Ausführungsformen können außerdem als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich der binären Übersetzung, des Codemorphings usw.)
  • In einigen Fällen kann ein Befehlsumsetzer verwendet werden, um einen Befehl von einem Quellbefehlssatz zu einem Zielbefehlssatz umzusetzen. Der Befehlsumsetzer kann z. B. übersetzen (z. B. unter Verwendung der statischen binären Übersetzung, der dynamischen binären Übersetzung einschließlich der dynamischen Kompilierung), morphen, emulieren oder anderweitig einen Befehl in einen oder mehrere andere Befehle umsetzen, die durch den Kern zu verarbeiten sind. Der Befehlsumsetzer kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumsetzer kann sich in dem Prozessor, außerhalb des Prozessors oder teilweise in dem Prozessor und teilweise außerhalb des Prozessors befinden.
  • 40 ist ein Blockschaltplan, der die Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz umzusetzen, gemäß den Ausführungsformen der Offenbarung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumsetzer ein Software-Befehlsumsetzer, obwohl alternativ der Befehlsumsetzer in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 40 zeigt ein Programm in einer höheren Sprache 4002, das unter Verwendung eines x86-Kompilierers 4004 kompiliert werden kann, um einen binären x86-Code 4006 zu erzeugen, der nativ durch einen Prozessor mit wenigstens einem x86-Befehlssatz-Kern 4016 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 4016 repräsentiert irgendeinen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel@-Prozessor mit wenigstens einem x86-Befehlssatz-Kern durch das kompatible Ausführen oder anderweitige Verarbeiten (1) eines wesentlichen Anteils des Befehlssatzes des Intel®-x86-Befehlssatz-Kerns oder (2) von Objektcode-Versionen von Anwendungen oder anderer Software, die darauf abzielt, in einem Intel@-Prozessor mit wenigstens einem x86-Befehlssatz-Kern ausgeführt werden, ausführen kann, um im Wesentlichen das gleiche Ergebnis wie ein Intel®-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erreichen. Der x86-Kompilierer 4004 repräsentiert einen Kompilierer, der betreibbar ist, um binären x86-Code 4006 (z. B. Objektcode) zu erzeugen, der mit einer oder ohne eine zusätzliche Verbindungsverarbeitung in dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 4016 ausgeführt werden kann. Ähnlich zeigt 40 das Programm in der höheren Sprache 4002, das unter Verwendung eines Kompilierers 4008 für einen alternativen Befehlssatz kompiliert werden kann, um binären Code 4010 des alternativen Befehlssatzes zu erzeugen, der nativ durch einen Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 4014 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technology of Sunnyvale, CA, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings of Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlsumsetzer 4012 wird verwendet, um den binären x86-Code 4006 in Code umzusetzen, der nativ durch den Prozessor ohne einen x86-Befehlssatz-Kern 4014 ausgeführt werden kann. Dieser umgesetzte Code ist wahrscheinlich nicht der gleiche wie der binäre Code 4010 des alternativen Befehlssatzes, weil ein Befehlsumsetzer, der dies kann, schwierig herzustellen ist; der umgesetzte Code erreicht jedoch den allgemeinen Betrieb und kann aus Befehlen aus dem alternativen Befehlssatz gebildet sein. Folglich repräsentiert der Befehlsumsetzer 4012 Software, Firmware, Hardware oder eine Kombination daraus, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, ermöglicht, den binären x86-Code 4006 auszuführen.

Claims (24)

  1. Vorrichtung, die Folgendes umfasst: eine Matrixoperations-Beschleunigerschaltung, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst; erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, die an die Matrixoperations-Beschleunigerschaltung gekoppelt sind; zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, die an die Matrixoperations-Beschleunigerschaltung gekoppelt sind; einen Decodierer eines Hardware-Prozessorkerns, der an die Matrixoperations-Beschleunigerschaltung gekoppelt ist, um einen einzelnen Befehl in einen decodierten einzelnen Befehl zu decodieren, wobei der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert; und eine Ausführungsschaltung des Hardware-Prozessorkerns, um den decodierten einzelnen Befehl auszuführen, um: einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden, zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert: die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern, eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert: die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden, die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern.
  2. Vorrichtung nach Anspruch 1, wobei, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert die Matrixoperations-Beschleunigerschaltung die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls beginnen soll.
  3. Vorrichtung nach Anspruch 1, wobei die Matrixoperations-Beschleunigerschaltung für jede mehreren Register einen Identifikationswert zuweist, die eine zweidimensionale Eingangsmatrix repräsentieren, und die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
  4. Vorrichtung nach Anspruch 3, wobei die Matrixoperations-Beschleunigerschaltung den zweiten mehreren Registern einen anderen Identifikationswert zuweisen soll, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern.
  5. Vorrichtung nach Anspruch 1, wobei, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, die Matrixoperations-Beschleunigerschaltung den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht lädt.
  6. Vorrichtung nach Anspruch 1, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
  7. Vorrichtung nach Anspruch 1, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
  8. Vorrichtung nach Anspruch 7, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
  9. Verfahren, das Folgendes umfasst: Decodieren, mit einem Decodierer eines Hardware-Prozessorkerns, eines einzelnen Befehls in einen decodierten einzelnen Befehl, wobei der Hardware-Prozessorkern an eine Matrixoperations-Beschleunigerschaltung gekoppelt ist, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst, wobei die Matrixoperations-Beschleunigerschaltung an erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, und zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, gekoppelt ist und der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert; und Ausführen des decodierten einzelnen Befehls mit einer Ausführungsschaltung des Hardware-Prozessorkerns, um: einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden, zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert: die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern, eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert: die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden, die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern.
  10. Verfahren nach Anspruch 9, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert, ferner das Beginnen der Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls umfasst.
  11. Verfahren nach Anspruch 9, das ferner das Zuweisen eines Identifikationswerts für jede mehreren Register, die eine zweidimensionale Eingangsmatrix repräsentieren, umfasst, wobei die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
  12. Verfahren nach Anspruch 11, das ferner das Zuweisen eines anderen Identifikationswerts den zweiten mehreren Registern, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern, umfasst.
  13. Verfahren nach Anspruch 9, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, ferner umfasst, den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht zu laden.
  14. Verfahren nach Anspruch 9, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
  15. Verfahren nach Anspruch 9, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
  16. Verfahren nach Anspruch 15, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
  17. Nicht transitorisches maschinenlesbares Medium, das Code speichert, der, wenn er durch eine Maschine ausgeführt wird, die Maschine veranlasst, ein Verfahren auszuführen, das Folgendes umfasst: Decodieren, mit einem Decodierer eines Hardware-Prozessorkerns, eines einzelnen Befehls in einen decodierten einzelnen Befehl, wobei der Hardware-Prozessorkern an eine Matrixoperations-Beschleunigerschaltung gekoppelt ist, die ein zweidimensionales Gitter aus verschmolzenen Multiplikations-Akkumulations-Schaltungen umfasst, wobei die Matrixoperations-Beschleunigerschaltung an erste mehrere Register, die eine erste zweidimensionale Eingangsmatrix repräsentieren, und zweite mehrere Register, die eine zweite zweidimensionale Eingangsmatrix repräsentieren, gekoppelt ist und der einzelne Befehl ein Feld enthält, das einen Ergebnisspeicher identifiziert; und Ausführen des decodierten einzelnen Befehls mit einer Ausführungsschaltung des Hardware-Prozessorkerns, um: einen ersten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen mit der ersten zweidimensionalen Eingangsmatrix aus den ersten mehreren Registern zu laden, zu überprüfen, ob ein zweiter Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen eine unmittelbar vorhergehende zweidimensionale Eingangsmatrix speichert, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung eines vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert: die Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls zu verhindern, eine Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der unmittelbar vorhergehenden zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern, und wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert: die zweite zweidimensionale Eingangsmatrix in den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen zu laden, die Operation an der ersten zweidimensionalen Eingangsmatrix aus dem ersten Puffer und der zweiten zweidimensionalen Eingangsmatrix aus dem zweiten Puffer auszuführen, um ein Ergebnis zu erzeugen, und das Ergebnis in dem Ergebnisspeicher zu speichern.
  18. Nicht transitorisches maschinenlesbares Medium nach Anspruch 17, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, nicht speichert, ferner das Beginnen der Rückgewinnung des zweiten Puffers zwischen der Ausführung des vorhergehenden Befehls und des decodierten einzelnen Befehls umfasst.
  19. Nicht transitorisches maschinenlesbares Medium nach Anspruch 17, das ferner das Zuweisen eines Identifikationswerts für jede mehreren Register, die eine zweidimensionale Eingangsmatrix repräsentieren, umfasst, wobei die Prüfung, ob der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, das Vergleichen der jeweiligen Identifikationswerte für entsprechende zweidimensionale Eingangsmatrizen von dem vorhergehenden Befehl und dem einzelnen Befehl umfasst.
  20. Nicht transitorisches maschinenlesbares Medium nach Anspruch 19, das ferner das Zuweisen eines anderen Identifikationswerts den zweiten mehreren Registern, um eine zweidimensionale Eingangsmatrix eines nächsten Befehls zu speichern, umfasst.
  21. Nicht transitorisches maschinenlesbares Medium nach Anspruch 17, das, wenn der zweite Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen die unmittelbar vorhergehende zweidimensionale Eingangsmatrix aus der Ausführung des vorhergehenden Befehls, die die gleiche wie die zweite zweidimensionale Eingangsmatrix ist, speichert, ferner umfasst, den zweiten Puffer des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen während der Ausführung des decodierten einzelnen Befehls nicht zu laden.
  22. Nicht transitorisches maschinenlesbares Medium nach Anspruch 17, wobei der Ergebnisspeicher dritte mehrere Register umfasst, die wenigstens eine zweidimensionale Ausgangsmatrix repräsentieren, die durch die Ausführung des decodierten einzelnen Befehls gebildet wird.
  23. Nicht transitorisches maschinenlesbares Medium nach Anspruch 17, wobei die Operation das Übertragen einer jeweiligen Ausgabe von jeder einer ersten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters stromabwärts zu einem jeweiligen Eingang von jeder einer zweiten geeigneten Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen des zweidimensionalen Gitters umfasst, um das Ergebnis zu bilden.
  24. Nicht transitorisches maschinenlesbares Medium nach Anspruch 23, wobei die erste geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine von einer Zeile oder einer Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist und die zweite geeignete Teilmenge verschmolzener Multiplikations-Akkumulations-Schaltungen eine andere der einen von der Zeile oder der Spalte des zweidimensionalen Gitters aus verschmolzenen Multiplikations-Akkumulations-Schaltungen ist.
DE102020126212.4A 2019-12-28 2020-10-07 Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers Pending DE102020126212A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/729,361 US11714875B2 (en) 2019-12-28 2019-12-28 Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US16/729,361 2019-12-28

Publications (1)

Publication Number Publication Date
DE102020126212A1 true DE102020126212A1 (de) 2021-07-01

Family

ID=71098561

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020126212.4A Pending DE102020126212A1 (de) 2019-12-28 2020-10-07 Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers

Country Status (7)

Country Link
US (2) US11714875B2 (de)
JP (2) JP2021108102A (de)
KR (2) KR20210086447A (de)
CN (2) CN113050990A (de)
BR (1) BR102020019657A2 (de)
DE (1) DE102020126212A1 (de)
TW (1) TW202125287A (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4053695A1 (de) 2017-03-20 2022-09-07 INTEL Corporation Systeme, verfahren und vorrichtungen für operationen zur dot-erzeugung
US11372644B2 (en) * 2019-12-09 2022-06-28 Meta Platforms, Inc. Matrix processing instruction with optional up/down sampling of matrix
US11467834B2 (en) * 2020-04-01 2022-10-11 Samsung Electronics Co., Ltd. In-memory computing with cache coherent protocol
JP2021192187A (ja) * 2020-06-05 2021-12-16 富士通株式会社 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
CN113867799A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN113867793A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
CN118012505A (zh) * 2020-06-30 2024-05-10 上海寒武纪信息科技有限公司 人工智能处理器、集成电路芯片、板卡、电子设备
CN113867790A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡和计算方法
CN113867789A (zh) * 2020-06-30 2021-12-31 上海寒武纪信息科技有限公司 计算装置、集成电路芯片、板卡、电子设备和计算方法
US11494326B1 (en) * 2021-03-30 2022-11-08 Amazon Technologies, Inc. Programmable computations in direct memory access engine
US20230094414A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Matrix operation with multiple tiles per matrix dimension
TWI819937B (zh) * 2022-12-28 2023-10-21 國立成功大學 應用於類神經網路的記憶內運算的加速器

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5475822A (en) 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6161219A (en) 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
FR2787233B1 (fr) 1998-12-11 2001-02-16 St Microelectronics Sa Procede pour verifier l'integrite des circuits de decodage d'une memoire
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7725521B2 (en) 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US6877020B1 (en) 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7003542B2 (en) 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US7209939B2 (en) 2002-07-11 2007-04-24 Sun Microsystems, Inc. Precision improvement method for the Strassen/Winograd matrix multiplication method
US6944747B2 (en) 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7657880B2 (en) * 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US7159103B2 (en) * 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US20040193668A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney Virtual double width accumulators for vector processing
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20070271325A1 (en) * 2006-05-08 2007-11-22 Nvidia Corporation Matrix multiply with reduced bandwidth requirements
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US7797362B2 (en) 2007-02-23 2010-09-14 Texas Instruments Incorporated Parallel architecture for matrix transposition
US8392487B1 (en) 2007-03-29 2013-03-05 Compass Electro-Optical Systems Ltd Programmable matrix processor
US8028015B2 (en) 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
US8923510B2 (en) 2007-12-28 2014-12-30 Intel Corporation Method and apparatus for efficiently implementing the advanced encryption standard
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8250130B2 (en) 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
US8060730B2 (en) 2008-05-30 2011-11-15 Freescale Semiconductor, Inc. Selective MISR data accumulation during exception processing
US20100180100A1 (en) 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US20100191787A1 (en) * 2009-01-29 2010-07-29 Vns Portfolio Llc Sequential Multiplier
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US9727471B2 (en) * 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
CN103502935B (zh) 2011-04-01 2016-10-12 英特尔公司 向量友好指令格式及其执行
US20120314775A1 (en) 2011-06-08 2012-12-13 Vixs Systems, Inc. Video decoder with transposing vector processor and methods for use therewith
US20140149480A1 (en) 2012-11-28 2014-05-29 Nvidia Corporation System, method, and computer program product for transposing a matrix
US9442723B2 (en) 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
US9286216B2 (en) 2014-01-16 2016-03-15 Carnegie Mellon University 3DIC memory chips including computational logic-in-memory for performing accelerated data processing
US9778908B2 (en) 2014-07-02 2017-10-03 Via Alliance Semiconductor Co., Ltd. Temporally split fused multiply-accumulate operation
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10535114B2 (en) 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
US10437562B2 (en) * 2016-12-30 2019-10-08 Intel Corporation Apparatus and method for processing sparse data
DK3812900T3 (da) 2016-12-31 2024-02-12 Intel Corp Systemer, fremgangsmåder og apparater til heterogen beregning
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
EP4053695A1 (de) * 2017-03-20 2022-09-07 INTEL Corporation Systeme, verfahren und vorrichtungen für operationen zur dot-erzeugung
US10678507B2 (en) * 2017-12-22 2020-06-09 Alibaba Group Holding Limited Programmable multiply-add array hardware
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element

Also Published As

Publication number Publication date
CN117724763A (zh) 2024-03-19
US20200201932A1 (en) 2020-06-25
TW202125287A (zh) 2021-07-01
JP2021108102A (ja) 2021-07-29
KR20240011204A (ko) 2024-01-25
BR102020019657A2 (pt) 2021-06-29
KR20210086447A (ko) 2021-07-08
CN113050990A (zh) 2021-06-29
US11714875B2 (en) 2023-08-01
US20240078283A1 (en) 2024-03-07
JP2024038122A (ja) 2024-03-19

Similar Documents

Publication Publication Date Title
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112017001804T5 (de) Vorrichtung und Verfahren für träge synchrone Seitentabellenaktualisierungen mit geringem Aufwand
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE202019005682U1 (de) Hardwaregestützte Paging-Mechanismen
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters

Legal Events

Date Code Title Description
R130 Divisional application to

Ref document number: 102020008273

Country of ref document: DE