DE102018124919A1 - Skalierbare speicheroptimierte Hardware für Matrix-Solve - Google Patents

Skalierbare speicheroptimierte Hardware für Matrix-Solve Download PDF

Info

Publication number
DE102018124919A1
DE102018124919A1 DE102018124919.5A DE102018124919A DE102018124919A1 DE 102018124919 A1 DE102018124919 A1 DE 102018124919A1 DE 102018124919 A DE102018124919 A DE 102018124919A DE 102018124919 A1 DE102018124919 A1 DE 102018124919A1
Authority
DE
Germany
Prior art keywords
matrix
block
hwa
calculation block
fetch
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
DE102018124919.5A
Other languages
English (en)
Inventor
Gurpreet Kalsi
Om Omer
Dipan Kumar Mandal
Santosh Rethinagiri
Gopi Neela
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 IP 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 IP Corp filed Critical Intel IP Corp
Publication of DE102018124919A1 publication Critical patent/DE102018124919A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/527Multiplying only in serial-parallel fashion, i.e. one operand being entered serially and the other in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • 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/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • G06F17/12Simultaneous equations, e.g. systems of linear equations
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6022Using a prefetch buffer or dedicated prefetch cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/654Look-ahead translation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

Systeme und Verfahren für Matrix-Solve-Anwendungen beinhalten eine speicheroptimierte hardwarebeschleunigte (HWA-) Lösung mit skalierbarer Architektur (d. h. spezialisierter Schaltungsanordnung) für HWA-Matrix-Solve-Operationen. Die hier beschriebenen Matrix-Solve-Lösungen können eine skalierbare Hardware-Architektur mit Parallelverarbeitung (z. B. Verarbeitung „in Spalten“) enthalten, die die Fähigkeit bereitstellt, mehrere Ausgangswerte parallel zu berechnen. Die hier beschriebenen HWA-Matrix-Solve-Lösungen können simultane Mehr-Spalten-Verarbeitung beinhalten, was eine geringere Anzahl an Ausführungszyklen und eine reduzierte Gesamtanzahl von Speicherzugriffen bereitstellt. Dieses HWA-Matrix-Solve stellt eine geringe Latenz und energieeffiziente Matrix-Solve-Lösungen bereit, was verwendet werden kann, um den Energieverbrauch zu reduzieren und die Leistung in verschiedenen matrixbasierten Anwendungen zu verbessern, wie zum Beispiel bei maschinellem Sehen, SLAM, AR/VR/Mixed Reality, maschinellem Lernen, Datenanalytik und anderen matrixbasierten Anwendungen.

Description

  • Technisches Gebiet
  • Hier beschriebene Ausführungsformen beziehen sich im Allgemeinen auf Computer-Hardware-Architektur.
  • Allgemeiner Stand der Technik
  • Es besteht zunehmend Bedarf an Lösungen für komplexe lineare Systeme. Zum Beispiel kann das Lösen linearer Gleichungssysteme verwendet werden, um eine Kameraposition und einen Kamerawinkel zu schätzen (z. B. Kameraposeschätzung) oder simultane Positionsbestimmungs- und Kartenerstellungs- (Simultaneous Localization and Mapping, SLAM-) Berechnungen für Fahrzeuge bereitzustellen, die in Anwendungen der Augmented Reality (AR) oder der Virtual Reality (VR) verwendet werden können. Viele Anwendungen lösen die linearen Gleichungssysteme, indem sie die linearen Gleichungen als Matrizen darstellen, und dann für eine Lösungsmatrix lösen (z. B. Matrix-Solve).
  • Die Matrix-Solve-Operationen werden häufig auf einem Software-Kernel durchgeführt, der auf einem generischen Prozessor läuft, wie zum Beispiel einer Central Processing Unit (CPU). Matrix-Solve-Operationen sind rechenintensiv. Für eine Matrix K mit M Zeilen und N Spalten (d. h. der Größe MxN) haben die Matrix-Solve-Operationen zum Beispiel eine Komplexität O(M2N). Die Matrix-Solve-Operationen erfordern auch erhebliche Speicherbandbreite, was zu einer erheblichen Zeitverzögerung beim Berechnen der Lösung (z. B. hoher Latenz) führt. Die hohe Latenz kann die Leistung verschiedener Anwendungen erheblich beeinträchtigen, wie zum Beispiel Schätzung der Kamerapose oder SLAM-Berechnungen verlangsamen. In einer Ausführungsform brauchte eine Matrix-Solve-Operation, die auf einer ARM- (A9 Cortex) CPU bei 1,2 GHz unter Verwendung eines für die ARM-Architektur optimierten Software-Kernels lief, 1,55 ms, um nach einer 128x100 Ausgangsmatrix aufzulösen. Zusätzlich zu den Anforderungen hoher Latenz und großer Speicherbandbreite erfordern Matrix-Solve-Operationen auch erhebliche Energie, um die große Anzahl von Speicherzugriffen auszuführen. Die hohe Latenz und der hohe Energieverbrauch können die Leistung von zeitabhängigen Anwendungen, wie zum Beispiel AR- oder VR-Anwendungen, erheblich reduzieren.
  • Figurenliste
    • 1 ist ein Blockdiagramm, das eine Vorwärtssubstitutions-HWA-Matrix-Solve-Stufe entsprechend einer Ausführungsform veranschaulicht.
    • 2 ist ein Blockdiagramm, das eine Rückwärtssubstitutions-HWA-Matrix-Solve-Stufe entsprechend einer Ausführungsform veranschaulicht.
    • 3 ist ein Blockdiagramm, das eine HWA-Matrix-Solve-Architektur entsprechend einer Ausführungsform veranschaulicht.
    • 4 ist ein Blockdiagramm, das eine HWA-Matrix-Solve-Vier-Spalten-Architektur entsprechend einer Ausführungsform veranschaulicht.
    • 5 ist ein Blockdiagramm eines HWA-Matrix-Solve-Verfahrens entsprechend wenigstens einer Ausführungsform.
    • 6 ist ein Blockdiagramm, das ein HWA-Matrix-Solve-System in der beispielhaften Form einer elektronischen Einrichtung entsprechend einer beispielhaften Ausführungsform veranschaulicht.
    • Die 7A - 7B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und die Befehls-Templates davon entsprechend einer Ausführungsform veranschaulichen.
    • 8A - 8D sind Blockdiagramme, die ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß einer Ausführungsform veranschaulichen.
    • 9 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung.
    • 10A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-Of-Order-Ausgabe-/Ausführungs-Pipeline entsprechend einer Ausführungsform veranschaulicht.
    • 10B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-Of-Order-Ausgabe-/Ausführungsarchitekturkern, der in einen Prozessor eingeschlossen sein soll, entsprechend einer Ausführungsform veranschaulicht.
    • 11A - 11B veranschaulichen ein Blockdiagramm einer spezifischeren, beispielhaften In-Order-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderen Kernen des gleichen Typs und/oder anderer Typen) in einem Chip wäre.
    • 12 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern aufweisen kann, der eine integrierte Speichersteuerung aufweisen kann und der integrierte Grafiken aufweisen kann, gemäß verschiedenen Ausführungsformen.
    • 13 ist ein Blockdiagramm eines Systems entsprechend einer Ausführungsform.
    • 14 ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems entsprechend einer Ausführungsform.
    • 15 ist ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems entsprechend einer Ausführungsform.
    • 16 ist ein Blockdiagramm eines SoC entsprechend einer Ausführungsform.
    • 17 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlskonverters zum Konvertieren binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz entsprechend einer Ausführungsform gegenüberstellt.
  • Beschreibung von Ausführungsformen
  • Eine Lösung für die technischen Probleme gegenüber Matrix-Solve-Operationen, die als ein Software-Kernel auf einem generischen Prozessor ausgeführt werden, beinhaltet eine speicheroptimierte Hardware-Beschleunigungs-(HWA-) Lösung mit skalierbarer Architektur (z. B. spezieller Schaltungsanordnung) für HWA-Matrix-Solve-Operationen. Die hier beschriebenen Implementierungen sind für verschiedene Matrix-Solve-Lösungen anwendbar, einschließlich einer Eingangsmatrix, die irgendeine Anzahl von Spalten oder Zeilen enthält, irgendeiner Genauigkeit der Elementewerte (z. B. Gleitkommazahlen mit halber, einfacher oder doppelter Genauigkeit nach IEEE 754), irgendeiner Lesedatenbreite und anderen Matrixvarianten. Die hier beschriebenen Matrix-Solve-Implementierungen können eine skalierbare Hardware-Architektur mit Parallelverarbeitung (z. B. Verarbeitung „in Spalten“) enthalten, die die Fähigkeit bereitstellt, mehrere Ausgabewerte parallel zu berechnen. Die hier beschriebenen HWA-Matrix-Solve-Implementierungen können simultane Mehr-Spalten-Verarbeitung beinhalten, was eine geringere Anzahl an Ausführungszyklen und eine reduzierte Gesamtanzahl von Speicherzugriffen bereitstellt. Zum Beispiel kann eine n-spaltige simultane Matrix-Solve-Verarbeitung die Speicherzugriffe insgesamt um einen Faktor von ungefähr n Malen reduzieren, und die Ausführung ist eine fast n-Mal schnellere Ausführung als die einer einspaltigen Ausführung.
  • Diese HWA-Matrix-Solve-Lösung stellt eine einheitliche Leistungsverbesserung bereit, wie in der nachstehenden Tabelle 1 gezeigt wird: Tabelle 1: Ausführungszeit Software-Kemel vs. Vier-Spalten-HWA
    Matrixgröße SW Vier-Spalten-HWA Verbesserung
    60 × 102 0,43 ms 0,04 ms 11x
    128 × 100 1,55 ms 0,13 ms 12x
    154 × 113 2,48 ms 0,21 ms 12x
  • Die Tabelle 1 oben zeigt einen Vergleich der Ausführungszeit zwischen einem Software- (SW-) Kernel-Matrix-Solve und einem hardwarebeschleunigten (HWA-) Vier-Spalten-Matrix-Solve. Für eine zunehmende Matrixgröße stellt das Vier-Spalten-HWA-Matrix-Solve eine Lösung bereit, die gleichbleibend 11x - 12x schneller als die Software-Kernel-Lösung ist. Das HWA-Matrix-Solve reduziert auch die Speicherbandbreite in hohem Maße und verbessert die Energieeffizienz, indem sie intelligente lokale Puffersteuerung und simultane Mehr-Spalten-Verarbeitung verwendet. Dieses HWA-Matrix-Solve stellt eine geringe Latenz und energieeffiziente Matrix-Solve-Lösungen bereit, was verwendet werden kann, um den Energieverbrauch zu reduzieren und die Leistung in verschiedenen matrixbasierten Anwendungen zu verbessern, wie zum Beispiel bei maschinellem Sehen, SLAM, AR/VR/Mixed Reality, maschinellem Lernen, Datenanalytik und anderen matrixbasierten Anwendungen. Das HWA-Matrix-Solve verbessert auch die Leistung und reduziert den Energieverbrauch in Einrichtungen, die auf diese matrixbasierten Anwendungen angewiesen sind, wie zum Beispiel Roboter, Drohnen, Smartphones, Wearable-Elektronik und andere Einrichtungen, die matrixbasierte Anwendungen betreiben.
  • Die HWA-Matrix-Solve-Architektur stellt verschiedene matrixspezifische Merkmale bereit. Wie nachstehend ausführlicher beschrieben wird, unterstützt die HWA-Matrix-Solve-Architektur Vorwärts- und Rückwärts-Operationen beim Lösen für die Lösungsmatrix K in der linearen Matrixgleichung CK = Y, wobei C und Y Eingangsmatrizen sind und wobei die Matrix C in LLT zerlegt ist, damit sich LLTK = Y ergibt. Die Eingangsmatrix C kann unter Verwendung der Cholesky-Zerlegung oder eines anderen Zerlegungsverfahrens in LLT zerlegt werden. Die HWA-Matrix-Solve-Architektur stellt die Fähigkeit bereit, entweder als eine untere Dreiecksmatrix (Vorwärtssubstitution) oder als eine obere Dreiecksmatrix (Rückwärtssubstitution) nach L aufzulösen, und kann diese Vorwärts- oder Rückwärtssubstitution in irgendeiner Reihenfolge durchführen. Die HWA-Matrix-Solve-Architektur verwendet parallele Operationen in einer oder mehreren Spalten, während sie serielle Abhängigkeit der Matrixoperationen erfüllt. In einer Spalte der Ausgangsmatrix basiert zum Beispiel die Berechnung des aktuellen Elements auf der Ausgabe aller vorherigen Elemente innerhalb der gleichen Spalte. Trotz dieser seriellen Abhängigkeit stellt die HWA-Matrix-Solve-Architektur parallele Ausführung in einer Spalte bereit.
  • Die HWA-Matrix-Solve-Architektur stellt verschiedene Konfigurationsvorteile bereit. Wie oben erwähnt wird, stellt das HWA-Matrix-Solve die Fähigkeit bereit, ausschließlich Vorwärtssubstitution, ausschließlich Rückwärtssubstitution oder sowohl Vorwärts- als auch Rückwärtssubstitution für vollständige Matrix-Solve-Operationen auszuführen. Das HWA-Matrix-Solve stellt die Fähigkeit bereit, zwischen spaltendominiertem und zeilendominiertem Speicher der Eingangsmatrizen auszuwählen und zu wechseln. Das HWA-Matrix-Solve kann die Effizienz weiter durch Vorbereiten für zukünftige Operationen verbessern, indem Multiply-and-Accumulate- (MAC-) Hintergrundoperationen unter Verwendung der MAC-Blöcke durchgeführt werden, die in der HWA-Architektur vorhanden sind, wie zum Beispiel, wenn die Host-Recheneinrichtung keine neuen Matrix-Solve-Operationen auszuführen hat.
  • Die HWA-Matrix-Solve-Architektur stellt lokal ausgewähltes pufferndes Zugriffssteuern bereit, was ebenfalls die Energieeffizienz erhöht und die Speicherbandbreitenanforderungen reduziert. Die HWA-Matrix-Solve-Architektur stellt In-Place-Ausgangssubstitution bereit, wobei die Ausgabe der Vorwärtssubstitution an den gleichen Speicherplatz geschrieben wird, an dem die endgültige Ausgabe erwartet wird. Dieser gleiche Speicherraum wird als Eingang für die Rückwärtssubstitution verwendet, wobei der Speicherraum zum Schreiben der In-Place-Substitutions-Matrixausgangswerte verwendet wird.
  • Die HWA-Matrix-Solve-Architektur stellt erhebliche Energieeinsparungen durch aggressive Datenwiederverwendung bereit, indem sie die Speicherzugriffe in hohem Maße reduziert, insbesondere bei Mehr-Spalten-Operationen des Matrix-Solve. Die gesteuerte Verwendung von lokalen Spaltenpuffern im HWA-Matrix-Solve reduziert auch externe Speicherzugriffe erheblich. Zusätzlich erreicht die HWA-Matrix-Solve-Architektur weitere Energieeinsparungen, indem sie aktive Clock-Gating-Logik verwendet, um die Anzahl von Zustandswechseln für Flipflops zu reduzieren, und indem sie Power-Gating verwendet, um zu reduzieren oder zu verhindern, dass Strom in Schaltungen fließt, die nicht im Einsatz sind. Insgesamt stellt die Hardware-Architekturkonfiguration des HWA-Matrix-Solve erhebliche Energieeinsparungen im Vergleich zu einem Matrix-Solve-Software-Kernel bereit, der auf generischer (d. h. unkonfigurierter) Prozessor-Hardware läuft.
  • Die folgende Beschreibung und die Zeichnungen veranschaulichen beispielhafte Ausführungsformen, obwohl andere Ausführungsformen strukturelle, logische, elektrische, Verarbeitungs- und andere Änderungen einschließen können. Abschnitte und Merkmale verschiedener Ausführungsformen können in denen anderer Ausführungsformen eingeschlossen oder durch diese substituiert werden. In den Ansprüchen dargelegte Ausführungsformen umschließen alle verfügbaren Äquivalente dieser Ansprüche.
  • Die 1 ist ein Blockdiagramm, das eine Vorwärtssubstitutions-HWA-Matrix-Solve-Stufe 100 entsprechend einer Ausführungsform veranschaulicht. Die HWA-Matrix-Solve-Lösung kann als eine zweistufige Operation ausgeführt werden: Vorwärtssubstitution, wie sie zum Beispiel in der 1 gezeigt wird, und Rückwärtssubstitution, wie sie zum Beispiel in der 2 gezeigt wird. Die hier beschriebene HWA-Matrix-Solve-Lösung stellt eine auf Hardware-Basis verbesserte Lösung für K in der linearen Gleichung CK = Y bereit, wobei C und Y Eingangsmatrizen sind. Die Matrix C kann in LLT zerlegt werden, damit sich LLTK = Y ergibt, wobei L eine invertierbare Dreiecksmatrix und LT ihre Transponierte ist. Durch Substituieren von XF für LTK beinhaltet die Vorwärtssubstitutionsoperation das Berechnen von XF unter Verwendung von L und Y als LXF = Y. Sobald XF berechnet ist, wird Rückwärtssubstitution verwendet, um das K in der Gleichung LTK = XF zu finden.
  • Ein Vorteil der HWA-Matrix-Solve-Lösung ist, dass sie kein Berechnen der Matrixtransponierten LT erfordert, um die Vorwärtssubstitution oder die Rückwärtssubstitution zu berechnen. Insbesondere ist die HWA-Matrix-Solve-Lösung in der Lage, die gleiche Hardware zum Ausführen von Operationen an L zu verwenden, indem zwischen einem Vorwärtssubstitutions-Speicherzugriffsmuster und einem Rückwärtssubstitutions-Speicherzugriffsmuster ausgewählt wird. Dies ermöglicht die Ausführung der HWA-Matrix-Solve-Operationen, indem entweder L oder LT im Speicher ist, entweder im zeilendominierten oder im spaltendominierten Format.
  • Für die Erörterung hier wird angenommen, dass L eine untere Dreiecksmatrix mit p Zeilen und q Spalten ist, wobei eine untere Dreiecksmatrix einen Wert von 0 für jedes Element über ihrer Diagonalen enthält (d. h. Element Lpq = 0 für jedes q > p). Für diese untere Dreiecksmatrix L wird die in der 1 gezeigte Vorwärtssubstitution vor der in der 2 gezeigten Rückwärtssubstitution durchgeführt. Allerdings kann die hier beschriebene HWA-Matrix-Solve-Lösung nach K auflösen, unabhängig davon, ob L die untere oder die obere Dreiecksmatrix ist. Wenn zum Beispiel L eine obere Dreiecksmatrix ist, wird die in der 2 gezeigte Rückwärtssubstitution vor der in der 1 gezeigten Vorwärtssubstitution durchgeführt.
  • Wie in der 1 gezeigt wird, ermöglicht das Substituieren AX = B für LXF = Y in der Vorwärtssubstitutions-HWA-Matrix-Solve-Stufe 100 die Berechnung der Matrix X in AX = B, wobei die Matrix X 120 die berechnete Ausgangsmatrix und die Matrix A 110 und die Matrix B 130 Eingangsmatrizen sind. Jedes Element Xpq in der Stufe 100 kann unter Verwendung der Gleichung (1) wie folgt berechnet werden: X p q = B p q i = 0 p 1 A p i X i q A p p
    Figure DE102018124919A1_0001
    In der Gleichung (1) entspricht die Matrix A 110 der unteren Dreiecksmatrix L. Es sei auch angemerkt, dass der obere Grenzwert der Summation p-1 und nicht die Anzahl an Spalten in der Matrix A 110 ist.
  • Beim Ausführen der Vorwärtssubstitutionsstufe 100 werden verschiedene Abschnitte der Matrix A 110 und der Matrix B 130 in den Speicher eingelesen, um jedes Element Xpq entsprechend der oben genannten Gleichung (1) zu berechnen. Die Stufe 100 kann in zwei Abschnitte getrennt werden: Einen parallelen Operations- und einen seriellen Operationssatz. Während der parallelen Operation werden die Spalten 112 der Matrix A und die Elemente 122 der Matrix X mit einer einzelnen Speicherleseoperation in den Speicher gezogen und zum Berechnen des Skalarprodukts i = 0 p 1 A p i X i q
    Figure DE102018124919A1_0002
    verwendet. Wie in der 1 gezeigt wird, werden vier Spalten 112 aus der Matrix A 110 ausgelesen, also werden vier Skalarprodukte parallel ausgeführt. Die Anzahl von mehreren SkalarproduktOperationen hängt (i) von der Bitbreite eines Elements und (ii) von der Datenbusbreite der Speicheranschlüsse ab (z. B. Datenbusbreite, die darauf basiert, welche Matrizen abgerufen werden). Für einen Datenbus mit einer Breite von 128 Bit und Gleitkommazahlen mit einfacher Genauigkeit (32 Bit) können 4 Skalarprodukte parallel ausgeführt werden.
  • Im Anschluss an die parallelen Operationen enthält die Stufe 100 einen Satz serieller Operationen. Die seriellen Operationen basieren auf dem Skalarprodukt, das in den parallelen Operationen berechnet worden ist. Falls das Skalarprodukt i = 0 p 1 A p i X i q
    Figure DE102018124919A1_0003
    als „Skalarprodukt1“ geschrieben wird, kann die Gleichung (1) als Xpq = (Bpq - (Skalarprodukt1)) / Appneu geschrieben werden. Die seriellen Operationen werden verwendet, um die Matrix X 120 auf Basis der Matrix A 110 und der Matrix B 130 entsprechend der oben genannten Gleichung (1) zu berechnen. Zum Beispiel werden die Werte 124 der Matrix X auf Basis der der Dreieckselemente 114 der Matrix A, der Diagonalelemente 116 der Matrix A und der Elemente 134 der Matrix B berechnet.
  • Die 2 ist ein Blockdiagramm, das eine Rückwärtssubstitutions-HWA-Matrix-Solve-Stufe 200 entsprechend einer Ausführungsform veranschaulicht. Wie oben beschrieben wird, beinhaltet die Vorwärtssubstitution der Stufe 100 das Berechnen von XF unter Verwendung von L und Y als LXF = Y, allerdings wird die Rückwärtssubstitution der Stufe 200 verwendet, um K in der Gleichung LTK = XF zu finden. Wie in der 2 gezeigt wird, löst die Rückwärtssubstitutionsstufe 200 nach der Matrix X 220 in der Gleichung AX = B auf, wobei AX = B durch LTK = XF substituiert wird.
  • Jedes Element Xpq in der Stufe 200 kann unter Verwendung der Gleichung (2) wie folgt berechnet werden: X p q = B p q i = p + 1 M 1 A p i X i q A p p
    Figure DE102018124919A1_0004
    In der Stufe 200 werden mehrere partielle Skalarprodukte parallel berechnet, wobei die mehreren partiellen Skalarprodukte verwendet werden, um jedes Element in der Matrix X 220 zu erstellen. In der Gleichung (2) bezeichnet M die Anzahl von Zeilen (oder Spalten) in der Matrix A 210. In der Stufe 200 stellt die Matrix A 210 die Transpositionsmatrix LT anstelle der Matrix L dar, somit sind alle Elemente unterhalb der Diagonalen Nullen (d. h. Apq = 0 für alle q < p).
  • Wie in der 2 gezeigt wird, werden mehrere Elemente jeder Zeile in der Matrix A 210 abgerufen und mit entsprechenden Elementen einer Spalte der Matrix X 220 multipliziert, um ein neues Element in der Matrix X 220 zu erstellen. Im beispielhaften Rückwärtsoperationsschritt 200, der in der 2 gezeigt wird, wird ein erstes partielles Skalarprodukt durch Abrufen, Multiplizieren und Summieren von vier Elementen 212 der Matrix A mit den Elementen 222 der Matrix X gebildet, und ein zweites partielles Skalarprodukt wird durch Abrufen, Multiplizieren und Summieren von vier Elementen 214 der Matrix A mit Elementen 224 der Matrix X gebildet. Das erste und zweite Skalarprodukt werden summiert, um das Skalarprodukt i = p + 1 M 1 A p i X i q
    Figure DE102018124919A1_0005
    zu berechnen. Anschließend wird das Skalarprodukt vom Element 236 der Matrix B subtrahiert und durch den Diagonalwert 216 der Matrix A dividiert. Falls das Skalarprodukt i = p + 1 M 1 A p i X i q
    Figure DE102018124919A1_0006
    als „Skalarprodukt2“ geschrieben wird, kann die anschließende Gleichung (2) als Xpq = (Bpq - (Skalarprodukt2)) / App. neu geschrieben werden.
  • Sowohl die Vorwärtssubstitutionsstufe 100 als auch die Rückwärtssubstitutionsstufe 200 weisen ähnliche Berechnungsstrukturen auf. Insbesondere beinhalten sowohl die Stufe 100 als auch die Stufe 200 Skalarproduktoperationen Skalarprodukt1 und Skalarprodukt2, die Multiply-and-Accumulate- (MAC-) Operationen sind. Sowohl die Stufe 100 als auch die Stufe 200 beinhalten dann die anschließende Subtraktion und dann eine Division, die die allgemeine Gleichung Xpq = (Bpq - (Skalarprodukt1,2)) / App gemeinsam nutzen.
  • Die für die Ausführung des HWA-Matrix-Solve erforderliche Zeit wird im Wesentlichen durch die serielle Abhängigkeit der Operationen beeinflusst. Insbesondere hängen die anschließenden Subtraktions- und Divisionsoperationen vom Abschluss der Skalarproduktoperationen ab. Trotz dieser seriellen Abhängigkeit berechnet die HWA-Matrix-Solve-Architektur allerdings mehrere Operationen parallel. Ein Vorteil ist die Fähigkeit, Elemente innerhalb einer gegebenen Spalte zu berechnen, was hier als Parallelität „in Spalten“ bezeichnet wird. Ein anderer Vorteil ist die Fähigkeit, simultane Mehr-Spalten-Verarbeitung durchzuführen. Diese und andere Vorteile werden nachstehend beschrieben.
  • Die HWA-Matrix-Solve-Operationen verbessern des Weiteren die Leistung, indem sie ein intelligentes Zugriffsmuster auf Matrixelemente verwenden, wie zum Beispiel spaltendominierten Zugriff der Matrix A 110 in der Stufe 100 und zeilendominierten Zugriff der Matrix A 210 in der Stufe 200. Dieses intelligente HWA-Matrix-Solve-Zugriffsmuster stellt On-the-fly-Abrufen der Matrix A 210 bereit, indem die gleiche Matrix A 210 verwendet wird, ohne AT im Speicher zu erfordern (d. h. durch Verwenden von L, ohne LT im Speicher zu erfordern). In der Stufe 100 werden Elemente der Matrix X 120 berechnet, beginnend mit der oberen linken Ecke (z. B. dem oberen Element der Elemente 122), dann abwärts in der Spalte und dann zu einer Spalte wechselnd, die benachbart zur Rechten ist. Gleichermaßen beginnen in der Stufe 200 die Berechnungen mit der unteren rechten Ecke der Matrix X 220 (z. B. dem unteren Element der Elemente 224), dann aufwärts in der Spalte und dann auf eine Spalte wechselnd, die benachbart zur Linken ist. Es sei angemerkt, dass die Ausgangsmatrix X 220 in der Stufe 200 auf den gleichen Speicherplatz zurückgeschrieben wird, aus dem die Matrix B 230 gelesen worden ist (z. B. In-Place-Ausgangssubstitution), was nachstehend weiter in Bezug auf die 3 beschrieben wird.
  • Die 3 ist ein Blockdiagramm, das eine HWA-Matrix-Solve-Architektur 300 entsprechend einer Ausführungsform veranschaulicht. In einer vollständigen Matrix-Solve-Operation wird die HWA-Matrix-Solve-Architektur 300 verwendet, um die Spalte-für-Spalte-Operationen der Matrix X 120 in der Stufe 100 auszuführen, und wechselt dann zur Stufe 200 für eine Spalte-für-Spalte-Berechnung der endgültigen Ausgabe. In der Stufe 200 wird aus dem gleichen Speicher die Eingangsmatrix B 230 gelesen und die Ausgangsmatrix X 220 in diesen geschrieben. Diese In-Place-Ausgangssubstitution reduziert oder verhindert die Notwendigkeit von zusätzlichem Speicherraum, wodurch die effiziente Verwendung von Speicherraum verbessert wird.
  • Die Architektur 300 enthält einen Master-Steuerblock 302. Der Master-Steuerblock 302 liest einen Konfigurationsbefehl 352, der von der Host-Einrichtung ausgegeben wird, und initialisiert dann die Matrix-Solve-Operation auf Basis eines Startimpulses, der aus der Host-Einrichtung empfangen wird. Der Master-Steuerblock 302 sendet, empfängt und mangt auch Signale an und von anderen Hardware-Komponenten, einschließlich „Start“-Signale und „Done“-Signale, um die Matrix-Solve-Operation zu steuern. Wenn die Matrix-Solve-Operation abgeschlossen ist, sendet der Master-Steuerblock 302 ein „Done“-Signal an die Host-Einrichtung zurück.
  • Die Architektur 300 enthält einen Abruf-A-Block 304A, der verwendet wird, um Daten aus dem Matrix-A-Speicher abzurufen. In der Abrufoperation enthält der Abruf-A-Block 304A einen Steuerblock 306A (z. B. Speicheradressregister), der eine angeforderte Adresse an den Speicher A über die Signalleitung 360 sendet, die Speicherinhalte über die Signalleitung 362 empfängt und die eingehenden Daten im First-In-First-Out- (FIFO-) Puffer 308A (z. B. Speicherdatenregisterpuffer) speichert. Der FIFO 308A ist möglicherweise nicht groß genug, um alle Daten der Matrix A zu speichern, also können mehrere Abrufoperationen verwendet werden, und der FIFO 308A kann als ein Puffer fungieren, um Abschnitte der Matrix A zu empfangen und sie einem anschließenden Berechnungsblock bereitzustellen. Der Abrufprozess wird nach dem Empfangen eines „Start“-Signals von der Master-Steuerung 302 ausgelöst. Wenn ein Abruf-A-Block 304A das Abrufen aller Daten der Matrix A abgeschlossen hat (z. B. keine ausstehenden Anforderungen) und wenn der FIFO 308A leer ist, wird der Abruf-A-Block 304A ein „Done“-Signal an die Master-Steuerung 302 senden. Der Abruf-A-Block 304A iteriert für N Male pro Stufe, wobei N die Anzahl an Spalten in der Ausgangsmatrix X ist. Diese Matrix-Solve-Lösung mit simultaner Verarbeitung von n Spalten reduziert die Zugriffe des Abruf-A-Blocks 304A um n Male, was die Gesamtanzahl an Speicherzugriffen nahezu um n Male reduziert.
  • Die Architektur 300 enthält einen Abruf-B-Block 304B, der verwendet wird, um Daten aus dem Matrix-B-Speicher abzurufen. Der Abruf-B-Block 304B funktioniert ähnlich wie der Abruf-A-Block 304A, enthält einen Steuerblock 306B, der eine angeforderte Adresse an den Speicher B sendet, empfängt die Speicherinhalte und speichert die eingehenden Daten im FIFO 308B. Anders als der Abruf-A-Block 304A ruft der Abruf-B-Block 304B die gesamte B-Matrix nur einmal pro Stufe ab.
  • Die Architektur 300 enthält einen In-Spalten-Parallelberechnungsblock 310, der die parallelen Abschnitte der Matrix-Solve-Operationen sowohl in der Stufe 100 als auch in der Stufe 200 berechnet. Der Parallelberechnungsblock 310 liest Daten aus dem Abruf-A-FIFO 308A, solange der FIFO 308A nicht leer ist und entsprechende Matrix-X-Werte verfügbar sind, wobei der X-Puffer 342 die Verfügbarkeit der Matrix-X-Werte angibt. Die parallelen Skalarprodukte werden unter Verwendung von Z unterschiedlichen MAC-Modulen 318A, 318B, ..., 318Z ausgeführt, deren Skalarprodukt in jeweiligen FIFO-Ausgangspuffern 320A, 320B, ..., 320Z gespeichert wird, bevor die Daten zum Seriellberechnungsblock 326 verschoben werden. Die Anzahl an unterschiedlichen MAC-Modulen kann auf einem Verhältnis der Lesedatenbreite zur Elementebreite basieren, wie zum Beispiel Z = Lesedatenbreite / Elementebreite. Zum Beispiel kann ein 128-Bit-Speicherlesen, bei dem Werte unter Verwendung von einfacher Genauigkeit (d. h. 32 Bits) dargestellt sind, unter Verwendung von 128/32 = 4 MAC-Modulen verarbeitet werden. Die getrennten FIFO-Puffer 322A, 322B, ..., 322Z werden verwendet, um die Elemente 114, die Elemente 116, die Elemente 124 und die Elemente 134 der 1 zu empfangen und bereitzustellen. Die Werte dieser FIFO-Puffer 322A, 322B, ..., 322Z werden verwendet, um die wenigen jüngsten Elemente der Zeilen (einschließlich der Diagonalelemente) in einer First In - First Out- (FIFO-) Konfiguration zu speichern und den nächsten Wert (d. h. FIFO-Puffer-„Pop“) als Reaktion auf ein Signal aus dem Block 326 für serielle Berechnung bereitzustellen. Der Block 310 für parallele Berechnung beginnt die Verarbeitung als Reaktion auf das Empfangen eines „Start“-Signals vom Master-Steuerblock 302 und sendet bei Abschluss der Ausführung für eine Spalte der Matrix X ein „Done“-Signal an den Master-Steuerblock 302 zurück, um anzugeben, dass der Block 310 für parallele Berechnung seine Operationen abgeschlossen hat.
  • Ein Vorteil der HWA-Matrix-Solve-Architektur 300 ist das Vorladen eines negativen B, was den negativen Wert von Bpq in der Gleichung (1) und der Gleichung (2) bereitstellt. Insbesondere stellt der Abruf-B 304B den B-Wert für eine negative MAC 314 bereit, die B durch Invertieren des Vorzeichenbits negiert, und stellt den negierten B-Wert dem MAC 318A bereit. Diese Hardware-Konfiguration entfernt die Subtraktionsoperation aus dem kritischen Pfad der seriellen Abhängigkeit des Seriellberechnungsblocks 326. Ein anderer Vorteil der HWA-Matrix-Solve-Architektur 300 ist die Bestimmung der Inversen des Diagonalelements auf Basis der Zerlegung der Matrix C in LLT , insbesondere durch Verwenden von App , das während der Matrixzerlegung berechnet worden ist (z. B. während einer Cholesky-Zerlegung).
  • Die Verwendung der vorher bestimmten Inversen vermeidet die Wiederberechnung der Inversen, was somit diese Wiederberechnung aus dem kritischen Pfad der seriellen Abhängigkeit entfernt. Insbesondere multipliziert der Seriellberechnungsblock 326 die ( B p q ( S k a l a r p r o d u k t 1 ) ) mit  1 A p p ,
    Figure DE102018124919A1_0007
    statt eine rechnerisch aufwändige Divisionsoperation (Bpq - (Skalarprodukt1)) /App zu verwenden. Auch wenn die HWA-Matrix-Solve-Architektur 300 so implementiert ist, dass sie eine Eingabe von L oder LT ohne Berechnung der Inversen von APP über die Matrixzerlegung aufnimmt, könnte ein inverser Block (nicht dargestellt) nach den FIFO-Puffern 322A, 322B, ..., 322Z addiert und die Inversenausgabe in einen zusätzlichen Ausgangs-FIFO (nicht dargestellt) geschrieben werden, der mit dem Seriellberechnungsblock 326 interagieren würde. In jeder Ausführungsform wird die Divisionsoperation im kritischen Pfad auf eine rechnerisch weniger aufwändige Multiplikationsoperation reduziert.
  • Die Architektur 300 enthält einen Seriellberechnungsblock 326. In der Stufe 100 berechnet dieser Seriellberechnungsblock 326 das neue Element der Matrix X für jede Zeile unter Verwendung des Skalarprodukts, das im Parallelberechnungsblock 310 erstellt worden ist, und Ausführen des zusätzlichen Skalarprodukts unter Verwendung des vorher berechneten neuen Elements der Matrix X. Wegen der in diesen Berechnungen verwendeten Eingaben besteht eine serielle Abhängigkeit davon, dass diese Eingaben vorher berechnet werden. In der Stufe 200 akkumuliert das Seriellberechnungs-MAC 336 die partiellen Skalarprodukte, die vom Parallelberechnungsblock 310 bereitgestellt werden. Aufgrund dieser seriellen Abhängigkeit wird ein Multi-Cycle-Path- (MCP-) Multiplizierer 330 statt eines Pipeline-Multiplizierers verwendet. Die Ausgabe des MCP-Multiplizierers 330 wird durch einen Negationsblock (nicht dargestellt) negiert, bevor sie zum X-Pufferblock 342 gesendet wird. Der Block 326 für serielle Berechnung beginnt die Verarbeitung als Reaktion auf das Empfangen eines „Start“-Signals vom Master-Steuerblock 302 und sendet bei Abschluss der Ausführung für eine Spalte der Matrix X ein „Done“-Signal an den Master-Steuerblock 302 zurück, um anzugeben, dass der Block 326 für serielle Berechnung seine Operationen abgeschlossen hat.
  • Die Architektur 300 enthält einen X-Pufferblock 342. Der X-Pufferblock 342 behandelt die Logik in Bezug auf Folgendes: (i) Speichern von neuen Elementen der Matrix X, die durch den Seriellberechnungsblock 326 berechnet worden sind, in einem lokalen Spaltenpuffer 346 (z. B. SRAM), (ii) Bereitstellen von Matrix-X-Eingaben in den Parallelberechnungsblock 310 (z. B. unter Verwendung von Vorabruflogik) und (iii) Schreiben von Ausgaben in den Matrix-X-Speicher 350. Der X-Pufferblock 342 enthält einen Vorabrufpuffer 348, um die Prognostizierbarkeit der Datenabrufe wirksam einzusetzen, wodurch die Leistung weiter verbessert wird. Die Architektur und Logik innerhalb des X-PufferBlocks 342 reduziert oder beseitigt eine erhebliche Anzahl von Zugriffen auf externen Speicher, wie sie andernfalls verwendet werden würden, um wiederholt auf Elemente der Matrix X zuzugreifen. Der X-Puffer-Block 342 beginnt die Verarbeitung als Reaktion auf den Empfang eines „Start“-Signals aus dem Master-Steuerblock 302 und sendet bei Abschluss der Ausführung einer Spalte der Matrix X ein „Done“-Signal zurück an den Master-Steuerblock 302, um anzugeben, dass der X-Puffer-Block 342 seine Operationen abgeschlossen hat.
  • Die 4 ist ein Blockdiagramm, das eine HWA-Matrix-Solve-Vier-Spalten-Architektur 400 entsprechend einer Ausführungsform veranschaulicht. Die Modularität dieser HWA-Matrix-Solve-Architektur 300 stellt eine effiziente Skalierung des Entwurfs für simultane Mehr-Spalten-Verarbeitung bereit, wie zum Beispiel die Vier-Spalten-Architektur 400. Die Vier-Spalten-Architektur 400 stellt vier Spalten-Berechnungsblöcke 410, 412, 414 und 416 bereit, die simultan arbeiten. Jeder Spaltenberechnungsblock enthält die Komponenten der Architektur 300, die benötigt werden, um eine Matrixspalte zu verarbeiten, einschließlich eines In-Spalten-Parallelberechnungsblocks, eines Seriellberechnungsblocks, eines X-Pufferblocks und eines Abruf-B-Blocks. Die Vier-Spalten-Architektur 400 sorgt für simultane Verarbeitung von 4 Spalten, allerdings kann dies erweitert oder reduziert werden, wie es nötig ist, um simultane n-Spaltenverarbeitung bereitzustellen, indem diese Module N/n Male iteriert werden, und um n Spalten-Berechnungsblöcke aufzuweisen.
  • Ein Merkmal, das diese Skalierung ermöglicht, ist, dass es keine Notwendigkeit gibt, Steuerinformationen (z. B. Zeilen- oder Spalten-Traversierungszählwerte) zwischen oder unter verschiedenen Berechnungsblöcken auszutauschen. Jeder Berechnungsblock führt eine ausgewählte Berechnung durch und schreibt seine Ausgabedaten in einen FIFO, und diese Daten werden anschließend von den Berechnungsblöcken aufgenommen. Jeder Berechnungsblock empfängt ein „Start“-Signal vom Master-Steuerblock 404 und sendet ein „Done“-Signal an den Master-Steuerblock 404 zurück, wenn die Daten in den jeweiligen FIFO geschrieben worden sind. Mit der Ausnahme von Abruf-B iterieren alle anderen Module N Male, wobei N die Anzahl von Spalten der Ausgangsmatrix ist. Für ein Vier-Spalten-HWA-Matrix-Solve, bei dem n = 4 ist, iterieren die anderen Module N/n Male.
  • Um simultane Mehr-Spalten-Verarbeitung innerhalb der Vier-Spalten-Architektur 400 bereitzustellen, wird der Abruf-A-Block 406 so modifiziert, dass er Synchronisationslogik enthält, die einen Eintrag aus einem FIFO nur abfragt (d. h. „auftauchen lässt“), wenn alle Spalten-Berechnungsblöcke 410, 412, 414 und 416 diesen Eintrag aufnehmen. Weil keine zusätzlichen Speicheranschlüsse in der Erweiterung der Architektur 300 auf die Vier-Spalten-Architektur 400 verwendet werden, werden zusätzlich zwei Arbitermodule (z. B. der Speicher-1-Arbiter 418 und der Speicher-2-Arbiter 420) hinzugefügt, um die Speicherzugriffsanforderungen aus verschiedenen Spalten-Berechnungsblöcken 410, 412, 414 und 416 zu arbitrieren.
  • Der Master-Steuerblock 404 stellt sicher, dass jeder Spaltenberechnungsblock seinen Anteil an den N/n Spalten berechnet. In der Ausführungsform, die in der Vier-Spalten-Architektur 400 gezeigt wird, berechnet der C0-Spaltenberechnungsblock 410 die Spalten 0 bis (N/4)-1 und der C1-Block 412 berechnet N/4 bis 2(N/4)-1 und so fort. Dies stellt verbesserte Verarbeitung über ein alternatives Verfahren bereit, die Spalten über Spalten-Berechnungsblöcke zu multiplexen (z. B. zu verschachteln), wie zum Beispiel die 0. Spalte im C0-Block 410, die 1. Spalte im C1-Block 412 und so fort zu berechnen. Diese Berechnung der Vier-Spalten-Architektur 400 der Spalten 0 bis (N/n)-1 im C0-Spaltenberechnungsblock 410 (und so fort) stellt n-spaltige simultane Verarbeitung bereit, während sie die Notwendigkeit vermeidet, Blöcke, wie zum Beispiel den Abruf-A 408, jeden In-Spalten-Parallelberechnungsblock und andere Berechnungsblöcke für simultane Verarbeitung neu zu entwerfen.
  • Die 5 ist ein Blockdiagramm eines Matrix-Solve-Verfahrens 500 entsprechend wenigstens einer Ausführungsform. Das Verfahren 500 beinhaltet, einen Abschnitt einer Matrix A 510 an einem Abruf-A-Block für einen Matrixspaltenberechnungsblock bereitzustellen. Das Verfahren 500 beinhaltet, ein neues Element der Matrix X 520 am Matrixspaltenberechnungsblock zu bestimmen. Das Bestimmen des neuen Elements der Matrix X 520 kann beinhalten, einen Abschnitt einer Matrix B 522 an einem Abruf-B-Block im Matrixspaltenberechnungsblock zu bestimmen. Das Bestimmen des neuen Elements der Matrix X 520 kann ebenfalls beinhalten, mehrere partielle Skalarprodukte 524 in einem Parallelberechnungsblock im Matrixspaltenberechnungsblock zu bestimmen. Die mehreren partiellen Skalarprodukte können auf Basis von Elementen der Matrix B und Elementen einer Matrix X bestimmt werden. Das Bestimmen des neuen Elements der Matrix X 520 kann auch beinhalten, das neue Element der Matrix X an einem Seriellberechnungsblock 526 im Matrixspaltenberechnungsblock zu bestimmen, wobei das neue Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte bestimmt wird.
  • Das Verfahren 500 beinhaltet auch, eine Speicheradressanforderung für den Abschnitt der Matrix B 530 aus einem Abruf-B-Speicheradressregister im Abruf-B-Block zu senden. Das Verfahren 500 beinhaltet, den Abschnitt der Matrix B 532 an einem Abruf-B-Speicherdatenregister-First-In-First-Out- (FIFO-) Puffer im Abruf-B-Block zu speichern und bereitzustellen. Das Verfahren 500 beinhaltet, eine Speicheradressanforderung für den Abschnitt der Matrix A 540 aus einem Abruf-A-Speicheradressregister im Abruf-A-Block zu senden. Das Verfahren 500 beinhaltet, den Abschnitt der Matrix A 542 an einem Abruf-A-Speicherdatenregister-FIFO-Puffer im Abruf-A-Block zu speichern und bereitzustellen.
  • Das Verfahren 500 beinhaltet, mehrere Matrixspalten 550 in mehreren Spaltenberechnungsblöcken zu berechnen, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält. Das Verfahren 500 beinhaltet, den Wert der Matrix X auf Basis des Bestimmens wenigstens eines von Folgenden zu bestimmen, eines Vorwärtssubstitutionswerts oder eines Rückwärtssubstitutionswerts 560. Das Verfahren 500 beinhaltet, den Abschnitt der Matrix B 570 an einem negativen Multiply-and-Accumulate-(MAC-) Block im Parallelberechnungsblock zu negieren.
  • Das Verfahren 500 beinhaltet, das neue Element der Matrix X 580 auf Basis der mehreren partiellen Skalarprodukte, die an einem seriellen MAC empfangen werden, im Seriellberechnungsblock zu bestimmen. Das Verfahren 500 beinhaltet, den bestimmten Wert der Matrix X in einem Speicher zu empfangen und in diesen zu schreiben 590, wobei der Wert der Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock empfangen wird.
  • Die 6 ist ein Blockdiagramm, das ein HWA-Matrix-Solve-System in der beispielhaften Form einer elektronischen Einrichtung 600, in der ein Satz oder eine Abfolge von Befehlen ausgeführt werden kann, um zu bewirken, dass die Maschine irgendeine der hier erörterten Methoden durchführt, entsprechend einer beispielhaften Ausführungsform veranschaulicht. Die elektronische Einrichtung 600 kann auch die in den 3 - 4 gezeigten Einrichtungen darstellen. In alternativen Ausführungsformen arbeitet die elektronische Einrichtung 600 als selbständige Einrichtung, oder sie kann mit anderen Maschinen verbunden (z. B. vernetzt) sein. Bei einem vernetzten Einsatz kann die elektronische Einrichtung 600 mit der Fähigkeit eines Servers oder einer Client-Maschine in Server-Client-Netzwerkumgebungen arbeiten, oder sie kann als eine Peer-Maschine in Peer-to-Peer- (oder verteilten) Netzwerkumgebungen fungieren. Die elektronische Einrichtung 600 kann eine integrierte Schaltung (IC), eine transportierbare elektronische Einrichtung, ein Personal Computer (PC), ein Tablet-PC, ein Hybrid-Tablet, ein Personal Digital Assistant (PDA), ein Mobiltelefon oder irgendeine elektronische Einrichtung 600 sein, die in der Lage ist, Befehle auszuführen (sequentiell oder anders), die Aktionen spezifizieren, die von dieser Maschine ausgeführt werden sollen, um eine Nutzereingabe zu detektieren. Obwohl nur eine einzelne elektronische Einrichtung 600 veranschaulicht wird, ist der Begriff „Maschine“ oder „elektronische Einrichtung“ so aufzunehmen, dass er irgendeine Ansammlung von Maschinen oder Einrichtungen beinhaltet, die einzeln oder gemeinsam einen Satz (oder mehrere Sätze) von Befehlen ausführt bzw. ausführen, um irgendeine oder mehrere der hier erörterten Methoden durchzuführen. Gleichermaßen ist der Begriff prozessorbasiertes System so aufzufassen, dass er irgendeinen Satz aus einer oder mehreren Maschinen beinhaltet, die durch einen Prozessor (z. B. einen Computer) gesteuert oder betrieben werden, um einzeln oder gemeinsam Befehle auszuführen, um irgendeine oder mehrere der hier erörterten Methoden durchzuführen.
  • Die beispielhafte elektronische Einrichtung 600 enthält wenigstens einen Prozessor 602 (z. B. einen Hauptprozessor (CPU), eine Grafikverarbeitungseinheit (GPU) oder beides, Prozessorkerne, Rechenknoten usw.), einen Hauptspeicher 604 und einen statischen Speicher 606, die miteinander über einen Link 608 (z. B. einen Bus) kommunizieren.
  • Die elektronische Einrichtung 600 enthält Matrix-Solve-Hardware 610, wobei die Matrix-Solve-Hardware 610 die oben in den 3 - 4 beschriebenen Komponenten enthalten kann. Die elektronische Einrichtung 600 kann des Weiteren eine Anzeigeeinheit 612 enthalten, wobei die Anzeigeeinheit 612 eine einzelne Komponente, die eine vom Nutzer lesbare Anzeige und eine Schutzschicht bereitstellt, oder einen anderen Anzeigetyp enthalten kann. Die elektronische Einrichtung 600 kann des Weiteren eine Eingabeeinrichtung 614 enthalten, wie zum Beispiel einen Drucktaster, eine Tastatur, einen NFC-Kartenleser oder eine Nutzerschnittstellen- (UI, User Interface) Navigationseinrichtung (z. B. eine berührungssensitive Eingabe). Die elektronische Einrichtung 600 kann zusätzlich eine Speichereinrichtung 616 enthalten, wie zum Beispiel eine Solid-State-Drive- (SSD-) Einheit. Die elektronische Einrichtung 600 kann zusätzlich eine Signalgenerierungseinrichtung 618 enthalten, um hörbare oder sichtbare Rückmeldung bereitzustellen, wie zum Beispiel einen Lautsprecher, um eine hörbare Rückmeldung bereitzustellen, oder eine oder mehrere LEDs, um eine sichtbare Rückmeldung bereitzustellen. Die elektronische Einrichtung 600 kann zusätzlich eine Netzwerkschnittstelleneinrichtung 620 und einen oder mehrere zusätzliche Sensoren (nicht dargestellt) enthalten, wie zum Beispiel einen Global Positioning System- (GPS-) Sensor, einen Kompass, einen Beschleunigungsaufnehmer oder einen anderen Sensor.
  • Die Speichereinrichtung 616 enthält ein maschinenlesbares Medium 622, auf welchem ein oder mehrere Sätze von Datenstrukturen und Befehlen 624 (z. B. Software) gespeichert sind, die eine oder mehrere der hier beschriebenen Methoden oder Funktionen ausführen oder von diesen genutzt werden. Die Befehle 624 können sich auch, vollständig oder wenigstens zum Teil, während ihrer Ausführung durch die elektronische Einrichtung 600 im Hauptspeicher 604, im statischen Speicher 606 und/oder im Prozessor 602 befinden. Der Hauptspeicher 604, der statische Speicher 606 und der Prozessor 602 können auch maschinenlesbare Medien bilden.
  • Obwohl das maschinenlesbare Medium 622 in einer beispielhaften Ausführungsform als ein einzelnes Medium veranschaulicht wird, kann der Begriff „maschinenlesbares Medium“ ein einzelnes Medium oder mehrere Medien beinhalten (z. B. eine zentralisierte oder verteilte Datenbank und/oder verknüpfte Caches und Server), die den einen oder die mehreren Befehle 624 speichern. Der Begriff „maschinenlesbares Medium“ ist auch so aufzufassen, dass er irgendein dinghaftes Medium beinhaltet, das zum Speichern, Codieren oder Führen von Befehlen zur Ausführung durch die Maschine imstande ist und das bewirkt, dass die Maschine irgendeine oder mehrere der Methoden der vorliegenden Offenbarung durchführt, oder das zum Speichern, Codieren und Führen von Datenstrukturen imstande ist, die von solchen Befehlen verwendet werden oder damit verknüpft sind. Der Begriff „maschinenlesbares Medium“ ist dementsprechend so aufzufassen, dass er Halbleiterspeicher und optische und magnetische Medien beinhaltet, ohne darauf beschränkt zu sein. Zu spezifischen Beispielen für maschinenlesbare Medien zählen nichtflüchtiger Speicher, wie zum Beispiel, ohne darauf beschränkt zu sein, Halbleiterspeichereinrichtungen (z. B. elektrisch programmierbarer Nur-Lese-Speicher (Electrically Programmable Read-Only Memory, EPROM), elektrisch löschbarer programmierbarer Nur-Lese-Speicher (Electrically Erasable Programmable Read-Only Memory, EEPROM)) und Flash-Speichereinrichtungen, Magnetplatten, wie zum Beispiel interne Festplatten und austauschbare Speicherplatten, magnetooptische Speicherplatten und CD-ROM- und DVD-ROM-Speicherplatten.
  • Die Befehle 624 können des Weiteren über ein Kommunikationsnetzwerk 626 unter Verwendung eines Übertragungsmediums über die Netzwerkschnittstelleneinrichtung 620 übertragen oder empfangen werden, die irgendeines einer Reihe von allgemein bekannten Übertragungsprotokollen nutzt (z. B. HTTP). Zu Beispielen für Kommunikationsnetzwerke zählen ein Local Area Network (LAN), ein Wide Area Network (WAN), das Internet, Mobiltelefonnetze und drahtlose Datennetze (z. B. Wi-Fi, NFC, Bluetooth, Bluetooth LE, 3G, 5G LTE/LTE-A, WIMAX-Netze usw.). Der Begriff „Übertragungsmedium“ ist so aufzufassen, dass er irgendein immaterielles Medium beinhaltet, das zum Speichern, Codieren oder Führen von Befehlen zur Ausführung durch die Maschine imstande ist, und beinhaltet digitale oder analoge Kommunikationssignale oder ein anderes immaterielles Medium, um die Kommunikation solcher Software zu ermöglichen.
  • Die Figuren unten stellen beispielhafte Architekturen und Systeme zur Implementierung von Ausführungsformen des Obigen ausführlich dar. Bei einigen Ausführungsformen werden eine oder mehrere Hardware-Komponenten und/oder Befehle, die oben beschrieben werden, emuliert, wie nachstehend ausführlich beschrieben wird, oder als Software-Module implementiert.
  • Ausführungsformen des bzw. der oben detaillierten Befehl(e) werden in einem „generischen vektorgerechten Befehlsformat“ ausgeführt, was nachstehend ausführlich beschrieben wird. In anderen Ausführungsformen wird ein solches Format nicht genutzt, und ein anderes Befehlsformat wird genutzt, allerdings ist die nachstehende Beschreibung der Schreibmaskenregister, verschiedener Datentransformationen (Swizzle, Broadcast usw.), Adressierung usw. im Allgemeinen auf die obige Beschreibung der Ausführungsformen des Befehls bzw. der Befehle anwendbar. Zusätzlich werden nachstehend beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Obige Ausführungsformen des Befehls bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die ausführlich beschriebenen beschränkt.
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate beinhalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Anzahl an Bits, Position von Bits) definieren, um unter anderem die durchzuführende Operation (z. B. Opcode) und den/die Operand(en), an dem/denen die Operation durchzuführen ist, und/oder (ein) andere(s) Datenfeld(er) (z. B. Maske) zu spezifizieren. Einige Befehlsformate werden durch die Definition von Befehls-Templates (oder Unterformaten) weiter aufgeteilt. Zum Beispiel können die Befehls-Templates eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber wenigstens einige weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Daher wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehls-Templates dieses Befehlsformats) ausgedrückt und enthält Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diesen Opcode und Operandenfelder zum Auswählen von Operanden (Quelle l/Ziel und Quelle2) zu spezifizieren; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfeldern aufweisen, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als Advanced Vector Extensions (weiterentwickelte Vektorerweiterungen, AVX) (AVX1 und AVX2) bezeichnet werden, und das Verwenden des Vector Extensions- (Vektorerweiterungen, VEX-) Codierschemas sind herausgegeben und/oder veröffentlicht worden (siehe z. B. Intel® 64 und IA-32 Architectures Software Developer's Manual, September 2014, und siehe Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des hier beschriebenen Befehls bzw. der hier beschriebenen Befehle können in unterschiedlichen Formaten ausgeführt sein. Zusätzlich werden nachstehend beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Ausführungsformen des Befehls bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die ausführlich beschriebenen beschränkt.
  • Generisches vektorgerechtes Befehlsformat
  • Ein vektorgerechtes Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Obwohl Ausführungsformen beschrieben werden, bei denen sowohl Vektor- als auch skalare Operationen durch das vektorgerechte Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorgerechten Befehlsformats.
  • Die 7A - 7B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und die Befehls-Templates davon entsprechend einer Ausführungsform veranschaulichen. Die 7A ist ein Blockdiagramm, das ein generisches vektorgerechtes Befehlsformat und Klasse-A-Befehls-Templates davon entsprechend Ausführungsformen der Erfindung veranschaulicht; während die 7B ein Blockdiagramm ist, das das generische vektorgerechte Befehlsformat und Klasse-B-Befehls-Templates davon entsprechend einer Ausführungsform veranschaulicht. Insbesondere ein generisches vektorgerechtes Befehlsformat 700, für das Klasse-A- und Klasse-B-Befehls-Templates definiert sind, die beide Befehls-Templates 705 ohne Speicherzugriff und Befehls-Templates 720 mit Speicherzugriff enthalten. Der Begriff „generisch“ im Kontext des vektorgerechten Befehlsformats bezieht sich darauf, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwort-Größe-Elementen oder alternativ dazu aus 8 Quadword-Größe-Elementen); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder - größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder verschiedene Vektoroperandengrößen unterstützen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit ( 16 Byte)).
  • Die Klasse-A-Befehls-Templates in der 7A beinhalten Folgendes: 1) in den Befehls-Templates ohne Speicherzugriff 705 wird ein Befehls-Template ohne Speicherzugriff, vollständige Rundungssteuertypoperation 710 und ein Befehls-Template ohne Speicherzugriff, Datentransformationstypoperation 715 gezeigt; und 2) in den Befehls-Templates mit Speicherzugriff 720 wird ein Befehls-Template für Speicherzugriff, temporär 725 und ein Befehls-Template für Speicherzugriff, nicht temporär 730 gezeigt. Die Klasse-B-Befehls-Templates in der 7B beinhalten Folgendes: 1) in den Befehls-Templates ohne Speicherzugriff 705 wird ein Befehls-Template ohne Speicherzugriff, Schreibmaskensteuern, partielle Rundungssteuertypoperation 712 und ein Befehls-Template ohne Speicherzugriff, Schreibmaskensteuern, Vektorlängentypoperation 717 gezeigt; und 2) in den Befehls-Templates für Speicherzugriff 720 wird ein Befehls-Template für Speicherzugriff, Schreibmaskensteuern 727 gezeigt.
  • Das generische vektorgerechte Befehlsformat 700 enthält die folgenden Felder, die nachstehend in der in den 7A - 7B veranschaulichten Reihenfolge aufgeführt sind.
  • Formatfeld 740 - ein spezifischer Wert (ein Befehlsformat-Identifiziererwert) in diesem Feld identifiziert eindeutig das vektorgerechte Befehlsformat und somit das Auftreten von Befehlen im vektorgerechten Befehlsformat in Befehlsströmen. Von daher ist dieses Feld optional in dem Sinne, dass es nicht für einen Befehlssatz benötigt wird, der nur das generische vektorgerechte Befehlsformat aufweist.
  • Basisoperationsfeld 742 - sein Inhalt unterscheidet unterschiedliche Basisoperationen.
  • Registerindexfeld 744 - sein Inhalt spezifiziert, direkt oder über Adressgenerierung, die Plätze der Quell- und Zieloperanden, seien sie in Registern oder im Speicher. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer PxQ-Registerdatei (z. B. 32x512, 16x128, 32x1024, 64x1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quell- und ein Zielregister sein können, können alternative Ausführungsformen mehr oder weniger Quell- und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 746 - sein Inhalt unterscheidet das Auftreten von Befehlen im generischen Vektorbefehlsformat, die Speicherzugriff angeben, von denen, die dies nicht tun, das heißt, zwischen Befehls-Templates ohne Speicherzugriff 705 und Befehls-Templates mit Speicherzugriff 720. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (wobei sie in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern spezifizieren), während Operationen ohne Speicherzugriff dies nicht tun (z. B. sind die Quelle und die Ziele Register). Obwohl dieses Feld in einer Ausführungsform auch zwischen drei unterschiedlichen Arten wählt, Speicheradressberechnungen durchzuführen, können alternative Ausführungsformen mehr, weniger oder andere Arten zum Durchführen von Speicheradressberechnungen unterstützen.
  • Ergänzungsoperationsfeld 750 - sein Inhalt unterscheidet, welche aus einer Vielzahl unterschiedlicher Operationen zusätzlich zur Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 768, ein Alphafeld 752 und ein Betafeld 754 unterteilt. Das Ergänzungsoperationsfeld 750 gestattet, dass übliche Operationsgruppen in einem einzigen Befehl, anstatt in 2, 3 oder 4 Befehlen, durchgeführt werden.
  • Skalierfeld 760 - sein Inhalt gestattet das Skalieren des Inhalts des Indexfeldes zur Speicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
  • Verlagerungsfeld 762A - sein Inhalt wird als Teil der Speicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verlagerung verwendet).
  • Verlagerungsfaktorfeld 762B (es ist anzumerken, dass die Nebeneinanderstellung des Verlagerungsfelds 762A direkt über dem Verlagerungsfaktorfeld 762B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressgenerierung verwendet; es spezifiziert einen Verlagerungsfaktor, der um die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Bytes im Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Slalierung * Index + Basis + skalierte Verlagerung verwendet). Redundante Bits niederer Ordnung werden ignoriert, und somit wird der Inhalt des Verlagerungsfaktorfelds mit der Gesamtgröße (N) der Speicheroperanden multipliziert, um die endgültige Verlagerung zu generieren, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N wird durch die Prozessor-Hardware zur Laufzeit auf Basis des vollständigen Opcode-Felds 774 (hier später beschrieben) und des Datenmanipulationsfelds 754C bestimmt. Das Verlagerungsfeld 762A und das Verlagerungsfaktorfeld 762B sind in dem Sinne optional, dass sie nicht für die Befehls-Templates ohne Speicherzugriff 705 verwendet werden und/oder dass andere Ausführungsformen nur eines oder keines der beiden implementieren.
  • Datenelementebreitenfeld 764 - sein Inhalt unterscheidet, welche von einer Reihe von Datenelementebreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle, in anderen Ausführungsformen lediglich für einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht benötigt wird, falls nur eine Datenelementebreite unterstützt wird und/oder falls Datenelementebreiten unter Verwendung eines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 770 - sein Inhalt steuert auf einer Basis pro Datenelement, ob diese Datenelementposition im Zielvektoroperanden das Ergebnis der Basisoperation und der Ergänzungsoperation widerspiegelt. Klasse-A-Befehls-Templates unterstützen Merging-Schreibmaskieren, während Klasse-B-Befehls-Templates sowohl Merging- als auch nullsetzendes Schreibmaskieren unterstützen. Beim Merging gestatten Vektormasken, dass jeder Elementesatz im Ziel vor Aktualisierungen während der Ausführung jeder Operation geschützt wird (die durch die Basisoperation und die Ergänzungsoperation spezifiziert wird); in einer anderen Ausführungsform, dass der alte Wert jedes Elements des Ziels beibehalten wird, wo das entsprechende Maskenbit eine 0 aufweist. Im Gegensatz dazu gestatten beim Nullsetzen Vektormasken, dass jeder Elementesatz im Ziel während der Ausführung jeder Operation nullgesetzt wird (die durch die Basisoperation und die Ergänzungsoperation spezifiziert wird); in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird, zu steuern (das heißt, die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); allerdings ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Somit erlaubt das Schreibmaskenfeld 770 partielle Vektoroperationen, einschließlich Lade-, Speicher-, Arithmetik-, Logikvorgänge usw. Während Ausführungsformen der Erfindung beschrieben werden, bei denen der Inhalt des Schreibmaskenfelds 770 eines aus einer Reihe von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und somit der Inhalt des Schreibmaskenfelds 770 indirekt die durchzuführende Maskierung identifiziert), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 770 direkt die auszuführende Maskierung spezifiziert.
  • Immediate-Feld 772 - sein Inhalt gestattet die Spezifikation eines Immediate. Dieses Feld ist optional in dem Sinn, dass es in einer Implementierung des generischen vektorgerechten Formats, das kein Immediate unterstützt, nicht vorhanden ist, und dass es nicht in Befehlen vorhanden ist, die kein Immediate verwenden.
  • Klassenfeld 768 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Unter Bezugnahme auf die 7A - 7B: Die Inhalte dieses Felds wählen zwischen Klasse-A- und Klasse-B-Befehlen aus. In den 7A - 7B werden Vierecke mit abgerundeten Ecken verwendet, um anzugeben, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 768A bzw. Klasse B 768B für das Klassenfeld 768 in den 7A - 7B).
  • Befehls-Templates der Klasse A
  • Im Fall der Befehls-Templates der Klasse A ohne Speicherzugriff 705 wird das Alphafeld 752 als ein RS-Feld 752A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden soll (z. B. Runden 752A.1 und Datentransformation 752A.2 werden jeweils für die Befehls-Templates ohne Speicherzugriff, Rundungstypoperation 710 und ohne Speicherzugriff, Datentransformationstypoperation 715 spezifiziert), während das Betafeld 754 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Befehls-Templates ohne Speicherzugriff 705 sind das Skalierfeld 760, das Verlagerungsfeld 762A und das Verlagerungsskalierfeld 762B nicht vorhanden.
  • Befehls-Templates ohne Speicherzugriff - vollständige
  • Rundungssteuertypoperation
  • Beim Befehls-Template ohne Speicherzugriff, vollständige Rundungssteuertypoperation 710 wird das Betafeld 754 als ein Rundungssteuerfeld 754A interpretiert, dessen Inhalt(e) statisches Runden bereitstellen. Obwohl in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 754A ein Feld 756 zur Unterdrückung aller Gleitkomma-Ausnahmen (SAE, Suppress All floating point Exceptions) und ein Rundungsoperationssteuerfeld 758 enthält, können alternative Ausführungsformen unterstützen, dass beide dieser Konzepte in das gleiche Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (sie können z. B. nur das Rundungsoperationssteuerfeld 758 aufweisen).
  • SAE-Feld 756 - sein Inhalt unterscheidet, ob Melden von Ausnahmeereignissen deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Felds 756 angibt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keine Art von Gleitkommaausnahmen-Merker und löst keine Gleitkommaausnahmen-Behandlungsroutine aus.
  • Rundungsoperationssteuerfeld 758 - sein Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundungsoperationssteuerfeld 758 ermöglicht somit das befehlsweise Ändern des Rundungsmodus. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfelds 750 diesen Registerwert.
  • Befehls-Templates ohne Speicherzugriff - Datentransformationstypoperation
  • Beim Befehls-Template 715 ohne Speicherzugriff, Datentransformationstypoperation wird das Betafeld 754 als ein Datentransformationsfeld 754B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datentransformationen durchgeführt werden soll (z. B. kein Datentransformieren, Swizzle, Broadcast).
  • Im Fall eines Befehls-Templates 720 für Speicherzugriff der Klasse A wird das Alphafeld 752 als ein Räumungshinweisfeld 752B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in der 7A werden temporäre 752B.1 bzw. nicht temporäre 752B.2 für das Befehls-Template 725 für Speicherzugriff, temporär und das Befehls-Template 730 für Speicherzugriff, nicht temporär spezifiziert), während das Betafeld 754 als ein Datenmanipulationsfeld 754C interpretiert wird, dessen Inhalt unterscheidet, welche einer Reihe von Datenmanipulationsoperationen (auch als Primitive bekannt) durchgeführt werden soll (z. B. keine Manipulation, Broadcast, Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Befehls-Templates 720 für Speicherzugriff enthalten das Skalierfeld 760 und optional das Verlagerungsfeld 762A oder das Verlagerungsskalierfeld 762B.
  • Vektorspeicherbefehle führen Vektorladevorgänge und Vektorspeichervorgänge aus bzw. in Speicher mit Konvertierungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten aus bzw. in Speicher in einer datenelementweisen Art, wobei die Elemente, die tatsächlich übertragen werden, von den Inhalten der Vektormaske vorgeschrieben werden, die als die Schreibmaske ausgewählt ist.
  • Befehls-Templates für Speicherzugriff - temporär
  • Temporäre Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von Cache-Speicherung zu profitieren. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
  • Befehls-Templates für Speicherzugriff - nicht temporär
  • Nicht temporäre Daten sind Daten, die wahrscheinlich nicht bald genug wiederverwendet werden, um von Caching im Level-1-Cache zu profitieren und denen Priorität für Räumung gegeben werden sollte. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
  • Befehls-Templates der Klasse B
  • Im Fall der Befehls-Templates der Klasse B wird das Alphafeld 752 als ein Schreibmaskensteuer- (Z-) Feld 752C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 770 gesteuerte Schreibmaskierung ein Merging oder ein Nullsetzen sein soll.
  • Im Fall der Befehls-Templates der Klasse B ohne Speicherzugriff 705 wird ein Teil des Betafelds 754 als ein RL-Feld 757A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden soll (z. B. werden Runden 757A.1 und Vektorlänge (VSIZE) 757A.2 für das Befehls-Template 712 ohne Speicherzugriff, Schreibmaskensteuern-, partielle Rundungstypsteueroperation bzw. für das Befehls-Template 717 ohne Speicherzugriff, Schreibmaskensteuern-, Vektorlängentypoperation spezifiziert), während der Rest des Betafeldes 754 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Befehls-Templates ohne Speicherzugriff 705 sind das Skalierfeld 760, das Verlagerungsfeld 762A und das Verlagerungsskalierfeld 762B nicht vorhanden.
  • Beim Befehls-Template 710 ohne Speicherzugriff, Schreibmaskensteuern, partielle Rundungssteuertypoperation wird der Rest des Betafelds 754 als ein Rundungsoperationsfeld 759A interpretiert und Ausnahmeereignismeldung ist deaktiviert (ein gegebener Befehl meldet keinerlei Gleitkomma-Ausnahmemerker und bewirkt keine Gleitkomma-Ausnahmebehandlungsroutine).
  • Rundungsoperationssteuerfeld 759A - sein Inhalt unterscheidet, genau wie das Rundungsoperationssteuerfeld 758, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundungsoperationssteuerfeld 759A ermöglicht somit das befehlsweise Ändern des Rundungsmodus. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfelds 750 diesen Registerwert.
  • Beim Befehls-Template 717 ohne Speicherzugriff, Schreibmaskensteuern-, Vektorlängentypoperation wird der Rest des Betafelds 754 als ein Vektorlängenfeld 759B interpretiert, dessen Inhalt unterscheidet, auf welcher aus einer Reihe von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall eines Befehls-Templates 720 für Speicherzugriff der Klasse B wird ein Teil des Betafelds 754 als ein Broadcast-Feld 757B interpretiert, dessen Inhalt unterscheidet, ob die Datenmanipulationsoperation vom Broadcast-Typ durchgeführt werden soll oder nicht, während der Rest des Betafelds 754 als das Vektorlängenfeld 759B interpretiert wird. Die Befehls-Templates 720 für Speicherzugriff enthalten das Skalierfeld 760 und optional das Verlagerungsfeld 762A oder das Verlagerungsskalierfeld 762B.
  • Mit Bezug auf das generische vektorgerechte Befehlsformat 700 wird ein vollständiges Opcode-Feld 774 gezeigt, das das Formatfeld 740, das Basisoperationsfeld 742 und das Datenelementebreitenfeld 764 enthält. Obwohl eine Ausführungsform gezeigt wird, bei der das vollständige Opcode-Feld 774 alle diese Felder enthält, enthält das vollständige Opcode-Feld 774 bei Ausführungsformen, die nicht alle diese unterstützen, weniger als alle diese Felder. Das vollständige Opcode-Feld 774 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 750, das Datenelementebreitenfeld 764 und das Schreibmaskenfeld 770 gestatten, dass diese Merkmale auf einer befehlsweisen Basis im generischen vektorgerechten Befehlsformat spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementebreitenfeld erzeugt insofern typisierte Befehle, als dass sie gestattet, dass die Maske auf der Basis unterschiedlicher Datenelementebreiten angewandt wird.
  • Die verschiedenen Befehls-Templates, die in Klasse A und Klasse B zu finden sind, sind in unterschiedlichen Situationen vorteilhaft. In einigen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne in einem Prozessor nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Universalhochleistungs-Out-Of-Order-Kern, der für Universalrechenvorgänge vorgesehen ist, nur Klasse B unterstützen; ein Kern, der vor allem für grafische und/oder wissenschaftliche (Durchsatz-) Berechnung vorgesehen ist, kann nur Klasse A unterstützen; und ein Kern, der für beides vorgesehen ist, kann beide unterstützen (natürlich liegt ein Kern, der eine Mischung aus Templates und Befehlen aus beiden Klassen aufweist, jedoch nicht alle Templates und Befehle aus beiden Klassen, im Geltungsbereich der Erfindung). Auch kann ein einzelner Prozessor mehrere Kerne enthalten, die alle die gleiche Klasse unterstützen oder in denen unterschiedliche Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, die primär für Grafik und/oder wissenschaftliches Rechnen gedacht sind, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne Universalhochleistungskerne mit Out-Of-Order-Ausführung und Registerumbenennung sein können, die für Universalrechenvorgänge gedacht sind, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere In-Order- oder Out-Of-Order-Kerne enthalten, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können in anderen Ausführungsformen der Erfindung Merkmale von einer Klasse auch in der anderen Klasse umgesetzt sein. In einer Hochsprache geschriebene Programme würden in eine Vielzahl unterschiedlicher ausführbarer Formen gebracht werden (z. B. Just-in-Time-kompiliert oder statisch kompiliert), einschließlich: 1) einer Form, die nur Befehle der Klasse(n) aufweist, die vom Zielprozessor zur Ausführung unterstützt werden; oder 2) einer Form, die alternative Routinen aufweist, die unter Verwendung unterschiedlicher Kombinationen der Befehle aller Klassen geschrieben worden sind und die einen Steuerflusscode aufweisen, der die auszuführenden Routinen auf Basis der Befehle auswählt, die vom Prozessor unterstützt werden, der gerade den Code ausführt.
  • Beispielhaftes spezifisches vektorgerechtes Befehlsformat
  • Die 8 ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorgerechtes Befehlsformat entsprechend einer Ausführungsform veranschaulicht. Die 8 zeigt ein spezifisches vektorgerechtes Befehlsformat 800, das in dem Sinne spezifisch ist, dass es die Position, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische vektorgerechte Befehlsformat 800 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und somit ähneln einige der Felder denen, die im vorhandenen x86-Befehlssatz und seiner Erweiterung verwendet werden (z. B. AVX), oder sind ihnen gleich. Dieses Format bleibt konsistent mit dem Präfixcodierfeld, dem realen Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verlagerungsfeld und den Immediate-Feldern des vorhandenen x86-Befehlssatzes mit Erweiterungen. Die Felder aus der 7, auf die die Felder aus der 8 abgebildet sind, werden veranschaulicht.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung zur Veranschaulichung in Bezug auf das spezifische vektorgerechte Befehlsformat 800 im Kontext des generischen vektorgerechten Befehlsformats 700 beschrieben werden, die Erfindung nicht auf das spezifische vektorgerechte Befehlsformat 800 beschränkt ist, es sei denn, es wird beansprucht. Zum Beispiel werden beim generischen vektorgerechten Befehlsformat 700 eine Vielzahl möglicher Größen für die verschiedenen Felder in Betracht gezogen, während das spezifische vektorgerechte Befehlsformat 800 mit Feldern spezifischer Größen gezeigt wird. Als spezifisches Beispiel: Obwohl das Datenelementebreitenfeld 764 als ein Ein-Bit-Feld im spezifischen vektorgerechten Befehlsformat 800 veranschaulicht wird, ist die Erfindung nicht darauf beschränkt (das heißt: Beim generischen, vektorgerechten Befehlsformat 700 werden andere Größen des Datenelementebreitenfeldes 764 in Betracht gezogen).
  • Das generische vektorgerechte Befehlsformat 700 enthält die folgenden Felder, die nachstehend in der Reihenfolge aufgelistet sind, die in 8A veranschaulicht wird.
  • EVEX-Präfix (Bytes 0 - 3) 802 - es ist in einer Vier-Byte-Form codiert.
  • Formatfeld 740 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 740, und es enthält 0x62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des vektorgerechten Befehlsformats verwendet wird).
  • Das zweite bis vierte Byte (EVEX-Bytes 1 - 3) enthalten eine Reihe von Bitfeldern, die eine spezifische Fähigkeit bereitstellen.
  • REX-Feld 805 (EVEX-Byte 1, Bits [7-5]) - es besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), einem EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] - X) und einem 757BEX-Byte 1, Bit [5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit und sind unter Verwendung der Einer-Komplement-Form codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 710 - dies ist der erste Teil des REX'-Feldes 710, und es ist das EVEX.R'-Bit-Feld (EVEX-Byte 1, 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 Erfindung wird dieses Bit, zusammen mit anderen, wie nachstehend angegeben wird, in bitinvertiertem Format gespeichert, um eine Unterscheidung (in dem allgemein bekannten x86 32-Bit-Modus) vom BOUND-Befehl zu treffen, dessen reales Opcode-Byte 62 ist, der jedoch im MOD R/M-Feld (nachstehend beschrieben) den Wert von 11 im MOD-Feld nicht akzeptiert; alternative Ausführungsformen der Erfindung speichern weder dieses noch die anderen, nachstehend angegebenen Bits im invertierten Format. Ein Wert von 1 wird zum Codieren der unteren 16 Register verwendet. Mit anderen Worten: R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R gebildet, und das andere RRR aus anderen Feldern.
  • Opcode-Map-Feld 815 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein implizites, führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementebreitenfeld 764 (EVEX-Byte 2, Bit [7] - W) - es wird durch die Bezeichnung EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvv 820 (EVEX-Byte 2, Bits [6:3] - vvvv) - die Rolle von EVEX.vvvv kann Folgendes beinhalten: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter (Einerkomplement-) Form spezifiziert ist, und gilt für Befehle mit 2 oder mehr Quelloperanden; 2) EVEX.vvvv codiert den Zielregisteroperanden, der für bestimmte Vektorverschiebungen in Einer-Komplement-Form spezifiziert ist; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit codiert das EVEX.vwv-Feld 820 die 4 Bits niederer Ordnung des ersten Quellregisterspezifikationselements, die in invertierter (Einer-Komplement-) Form gespeichert sind. Je nach Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
  • EVEX.U 768 Klassenfeld (EVEX-Byte 2, Bit [2] - U) - falls EVEX.U = 0, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1, gibt es Klasse B oder EVEX.U1 an.
  • Präfixcodierfeld 825 (EVEX-Byte 2, Bits [1:0] - pp) - es stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich dazu, dass es Unterstützung für die Legacy-SSE-Befehle im EVEX-Präfixformat bereitstellt, weist dies auch den Vorteil auf, das SIMD-Präfix kompakter zu machen (statt ein Byte zum Ausdrücken des SIMD-Präfixes erfordert das EVEX-Präfix lediglich 2 Bits). Um Legacy-SSE-Befehle, die ein SIMD-Präfix (66H, F2H, F3H) verwenden, sowohl im Legacy-Format als auch im EVEX-Präfixformat zu unterstützen, werden diese Legacy-SIMD-Präfixe in einer Ausführungsform in das SIMD-Präfixcodierfeld codiert; und sie werden bei Laufzeit in das Legacy-SIMD-Präfix erweitert, bevor sie dem PLA des Decoders bereitgestellt werden (somit kann das PLA sowohl das Legacy- als auch das EVEX-Format dieser Legacy-Befehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfelds direkt als eine Opcode-Erweiterung verwenden können, erweitern gewisse Ausführungsformen aus Gründen der Konsistenz in einer ähnlichen Weise, erlauben aber, dass unterschiedliche Bedeutungen durch diese älteren SIMD-Präfixe angegeben werden. Eine alternative Ausführungsform kann das PLA neu konzipieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und erfordert somit keine Erweiterung.
  • Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH, auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt, auch mit α veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Betafeld 754 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt durch βββ) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • REX'-Feld 710 - dies ist der Rest des REX'-Feldes und das EVEX.V'-Bitfeld (EVEX-Byte 3, 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 wird im bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten: V'VVVV wird durch Kombinieren von EVEX.V', EVEX.wvv gebildet.
  • Schreibmaskenfeld 770 (EVEX-Byte 3, Bits [2:0] - kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorher beschrieben worden ist. In einer Ausführungsform der Erfindung weist der spezifische Wert EVEX.kkk = 000 ein spezielles Verhalten auf, das impliziert, dass keine Schreibmaske für den jeweiligen Befehl verwendet wird (dies kann auf vielfältige Weise implementiert werden, einschließlich der Verwendung einer Schreibmaske, die mit allen Einsen festverdrahtet ist, oder von Hardware, die die Maskierungs-Hardware umgeht).
  • Real-Opcode-Feld 830 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld spezifiziert.
  • MOD R/M-Feld 840 (Byte 5) enthält das MOD-Feld 842, das Reg-Feld 844 und das R/M-Feld 846. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Feldes 842 zwischen Operationen für Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Felds 844 kann auf zwei Situationen zusammengefast werden: entweder den Zielregisteroperanden oder einen Quellregisteroperanden codieren oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren irgendeines Befehlsoperanden verwendet werden. Die Rolle des R/M-Felds 846 kann Folgendes beinhalten: den Befehlsoperanden, der eine Speicheradresse referenziert, zu codieren oder entweder den Zielregisteroperanden oder einen Quellregisteroperanden codieren.
  • Scale, Index, Base (SIB)-Byte (Byte 6) - wie vorher beschrieben worden ist, wird der Inhalt des Skalierfeldes 750 zur Speicheradressgenerierung verwendet. SIB.xxx 854 und SIB.bbb 856 - auf die Inhalte dieser Felder ist vorher in Hinsicht auf die Registerindizes Xxxx und Bbbb eingegangen worden.
  • Verlagerungsfeld 762A (Bytes 7 - 10) - wenn das MOD-Feld 842 10 enthält, sind die Bytes 7 - 10 das Verlagerungsfeld 762A, und es funktioniert genauso wie die Legacy-32-Bit-Verlagerung (disp32) und arbeitet mit Byte-Granularität.
  • Verlagerungsfaktorfeld 762B (Byte 7) - wenn das MOD-Feld 842 01 enthält, ist das Byte 7 das Verlagerungsfaktorfeld 762B. Die Position dieses Feldes ist die gleiche wie die der 8-Bit-Verlagerung des Legacy-x86-Befehlssatzes (disp8), die mit Byte-Granularität arbeitet. Weil disp8 vorzeichenerweitert ist, kann es nur Offsets zwischen -128 und 127 Bytes adressieren; in Bezug auf 64-Byte-Cachezeilen verwendet disp8 8 Bits, die auf nur vier wirklich verwendbare Werte gesetzt werden können: -128, -64, 0 und 64; weil häufig ein größerer Bereich benötigt wird, wird disp32 verwendet; allerdings erfordert disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verlagerungsfaktorfeld 762B eine Neuinterpretation von disp8; bei Verwendung des Verlagerungsfaktorfeldes 762B wird die eigentliche Verschiebung durch den Inhalt des Verlagerungsfaktorfeldes multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Verlagerungstyp wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verlagerung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verlagerung basiert auf der Annahme, dass die effektive Verlagerung ein Vielfaches der Granularität des Speicherzugriffs ist, und somit müssen die redundanten Bits niederer Ordnung des Adress-Offsets nicht codiert werden. Mit anderen Worten: Das Verlagerungsfaktorfeld 762B ersetzt die 8-Bit-Verlagerung des Legacy-x86-Befehlssatzes. Somit wird das Verlagerungsfaktorfeld 762B in der gleichen Weise wie eine 8-Bit-Verlagerung des x86-Befehlssatzes codiert (also keine Änderungen in den ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass disp8 auf disp8*N aufgeladen wird. Mit anderen Worten: Bei den Codierungsregeln oder den Codierungslängen gibt es keine Änderungen, sondern lediglich bei der Interpretation des Verlagerungswertes durch Hardware (die die Verlagerung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adress-Offset zu erhalten). Immediate-Feld 772 operiert wie vorher beschrieben worden ist.
  • Vollständiges Opcode-Feld
  • 8B ist ein Blockdiagramm, das entsprechend einer Ausführungsform der Erfindung die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das vollständige Opcode-Feld 774 besteht. Insbesondere enthält das vollständige Opcode-Feld 774 das Formatfeld 740, das Basisoperationsfeld 742 und das Datenelementebreiten- (W-) Feld 764. Das Basisoperationsfeld 742 enthält das Präfixcodierfeld 825, das Opcode-Map-Feld 815 und das reale Opcode-Feld 830.
  • Registerindexfeld
  • 8C ist ein Blockdiagramm, das entsprechend einer Ausführungsform der Erfindung die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das Registerindexfeld 744 besteht. Insbesondere enthält das Registerindexfeld 744 das REX-Feld 805, das REX'-Feld 810, das MODR/M.reg-Feld 844, das MODR/M.r/m-Feld 846, das VVVV-Feld 820, das xxx-Feld 854 und das bbb-Feld 856.
  • Ergänzungsoperationsfeld
  • Die 8D ist ein Blockdiagramm, das entsprechend einer Ausführungsform der Erfindung die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das Ergänzungsoperationsfeld 750 besteht. Wenn das Klasse (U)-Feld 768 0 enthält, bezeichnet es EVEX.U0 (Klasse A 768A); wenn es 1 enthält, bezeichnet es EVEX.U1 (Klasse B 768B). Wenn U = 0 ist und das MOD-Feld 842 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 752A interpretiert. Wenn das rs-Feld 752A eine 1 enthält (Runden 752A.1), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als das Rundungssteuerfeld 754A interpretiert. Das Rundungssteuerfeld 754A enthält ein Ein-Bit-SAE-Feld 756 und ein Zwei-Bit-Rundungsoperationsfeld 758. Wenn das rs-Feld 752A eine 0 enthält (Datentransformation 752A.2), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 754B interpretiert. Wenn U = 0 ist und das MOD-Feld 842 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis- (EH-) Feld 752B interpretiert, und das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 754C interpretiert.
  • Wenn U = 1 ist, wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer- (Z-) Feld 752C interpretiert. Wenn U = 1 ist und das MOD-Feld 842 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird ein Teil des Betafeldes 754 (EVEX-Byte 3, Bit [4] - S0) als das RL-Feld 757A interpretiert; wenn es eine 1 enthält (Runden 757A.1), wird der Rest des Betafeldes 754 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Rundungsoperationsfeld 759A interpretiert, während der Rest des Betafeldes 754 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Vektorlängenfeld 759B (EVEX-Byte 3, Bit [6-5] - L1-0) interpretiert wird, wenn das RL-Feld 757A eine 0 enthält (Vektorlänge 757.A2). Wenn U = 1 ist und das MOD-Feld 842 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als das Vektorlängenfeld 759B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Broadcast-Feld 757B (EVEX-Byte 3, Bit [4] - B) interpretiert.
  • Beispielhafte Registerarchitektur
  • Die 9 ist ein Blockdiagramm einer Registerarchitektur 900 entsprechend einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 910, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niederer Ordnung der unteren 16 zmm-Register werden den Registern ymm0-16 überlagert. Die 128 Bits niederer Ordnung der unteren 16 zmm-Register (die 128 Bits niederer Ordnung der ymm-Register) werden den Registern xmm0-15 überlagert. Das spezifische vektorgerechte Befehlsformat 800 operiert auf dieser überlagerten Registerdatei, wie in der nachstehenden Tabelle veranschaulicht wird.
    Einstellbare Vektorlänge Klasse Operationen Register
    Befehls- Templates, die nicht das Vektorlängenfeld 759B enthalten A ( 7A; U = 0) 710, 715, 725, 730 zmm-Register (die Vektorlänge beträgt 64 Byte)
    B ( 7B; U = 1) 712 zmm-Register (die Vektorlänge beträgt 64 Byte)
    Befehls-Templates, die das Vektorlängenfeld 759B enthalten B ( 7B; U = 1) 717, 727 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte), abhängig vom Vektorlängenfeld 759B
  • Mit anderen Worten: Das Vektorlängenfeld 759B wählt zwischen einer maximalen Länge und einer oder mehreren anderen, kürzeren Längen, wobei jede solcher kürzeren Längen halb so lang ist wie die vorhergehende Länge; und Befehls-Templates ohne das Vektorlängenfeld 759B operieren mit der maximalen Vektorlänge. Des Weiteren operieren in einer Ausführungsform die Klasse-B-Befehls-Templates des spezifischen vektorgerechten Befehlsformats 800 an gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und an gepackten oder skalaren Ganzzahldaten. Skalare Operationen sind Operationen, die an der Datenelementeposition der niedrigsten Ordnung in einem zmm-/ymm-/xmm-Register durchgeführt werden; die Datenelementepositionen höherer Ordnung bleiben, je nach Ausführungsform, entweder genauso, wie sie vor dem Befehl waren, oder sie werden nullgesetzt.
  • Schreibmaskenregister 915 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7) von jeweils 64 Bits Größe. In einer alternativen Ausführungsform sind die Schreibmaskenregister 915 16 Bits groß. Wie vorher beschrieben worden ist, kann das Vektormaskenregister k0 in einer Ausführungsform der Erfindung nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt es eine festverdrahtete Schreibmaske mit 0xFFFF, womit die Schreibmaskierung für diesen Befehl effektiv deaktiviert wird.
  • Universalregister 925 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden als RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stack-Registerdatei (x87-Stack) 945, auf die Aliasing der gepackten MMX Integer Flat-Register-Datei 950 erfolgt - in der veranschaulichten Ausführungsform ist der x87-Stack ein Acht-Elemente-Stack, 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 Operationen an gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
  • In alternativen Ausführungsformen der Erfindung können breitere oder schmalere Register verwendet werden. Zusätzlich können in alternativen Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwendet werden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren implementiert werden. Zum Beispiel können zu Implementierungen solcher Kerne Folgende zählen: 1) ein Universal-In-Order-Kern, der für Universalrechenvorgänge vorgesehen ist; 2) ein Hochleistungs-Universal-Out-Of-Order-Kern, der für Universalrechenvorgänge vorgesehen ist; 3) ein Spezialkern, der vor allem für Grafiken und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen ist. Zu Implementierungen unterschiedlicher Prozessoren können Folgende zählen: 1) eine CPU, die einen oder mehrere Universal-In-Order-Kerne enthält, die für Universalrechenvorgänge vorgesehen sind, und/oder einen oder mehrere Universal-Out-Of-Order-Kerne, die für Universalrechenvorgänge vorgesehen sind; und 2) einen Koprozessor, der einen oder mehrere Spezialkerne enthält, die vor allem für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, zu denen Folgende zählen können: 1) der Koprozessor auf einem von der CPU getrennten Chip; 2) der Koprozessor auf einem separaten Die im gleichen Package wie eine CPU; 3) der Koprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als Speziallogik, wie zum Beispiel als integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik, oder als Spezialkern bezeichnet); und 4) ein System-on-Chip, das die beschriebene CPU (manchmal als der bzw. die Applikationskern(e) oder Applikationsprozessor(en) bezeichnet), den oben beschriebenen Koprozessor und zusätzliche Funktionalität auf dem gleichen Die enthalten kann. Beispielhafte Kernarchitekturen werden als Nächstes beschrieben, gefolgt von den Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen: In-Order- und Out-Of-Order-Kern-Blockdiagramm
  • Die 10A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-Of-Order-Ausgabe-/Ausführungs-Pipeline entsprechend einer Ausführungsform veranschaulicht. Die 10B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-Of-Order-Ausgabe-/Ausführungsarchitekturkern, der in einen Prozessor eingeschlossen sein soll, entsprechend einer Ausführungsform veranschaulicht. Die Kästen mit durchgezogenen Linien in den 10A - 10B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während das optionale Hinzufügen der gestrichelt gezeichneten Kästen die Registerumbenennungs-Out-Of-Order-Ausgabe-/Ausführungs-Pipeline und -Kern veranschaulicht. Vorausgesetzt, dass der In-Order-Aspekt ein Teilsatz des Out-Of-Order-Aspekts ist, wird der Out-Of-Order-Aspekt beschrieben.
  • In der 10A enthält eine Prozessorpipeline 1000 eine Abrufstufe 1002, eine Längendecodierstufe 1004, eine Decodierstufe 1006, eine Zuordnungsstufe 1008, eine Umbenennungsstufe 1010, eine Scheduling-Stufe (auch als eine Versand- oder Ausgabestufe bekannt) 1012, eine Registerlese/Speicherlesestufe 1014, eine Ausführungsstufe 1016, eine Zurückschreib-/Speicherschreibstufe 1018, eine Ausnahmebehandlungsstufe 1022 und eine Übergabestufe 1024.
  • Die 10B zeigt den Prozessorkern 1090 einschließlich einer Front-End-Einheit 1030, die mit einer Ausführungs-Engine-Einheit 1050 gekoppelt ist, und beide sind mit einer Speichereinheit 1070 gekoppelt. Der Kern 1090 kann ein Reduced-Instruction-Set-Computing (RISC) -Kern, ein Complex-Instruction-Set-Computing (CISC) -Kern, ein Very-Long-Instruction-Word (VLIW) -Kern oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 1090 ein Spezialkern, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, ein Koprozessorkern, ein General-Purpose-Computing-Graphics-Processing-Unit (GPGPU) -Kern, ein Grafikkern oder Ähnliches sein.
  • Die Front-End-Einheit 1030 enthält eine Verzweigungsvorhersageeinheit 1032, die mit einer Befehls-Cache-Einheit 1034 gekoppelt ist, die mit einem Befehls-Übersetzungspuffer (-TLB, Translation Lookaside Buffer) 1036 gekoppelt ist, der mit einer Befehlsabrufeinheit 1038 gekoppelt ist, die mit einer Decodiereinheit 1040 gekoppelt ist. Die Decodiereinheit 1040 (oder der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, einen oder mehrere Mikrocode-Eintrittspunkte, einen oder mehrere Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die aus den ursprünglichen Befehlen decodiert worden sind oder diese anderweitig reflektieren oder anderweitig von diesen abgeleitet worden sind. Die Decodiereinheit 1040 kann unter Verwendung verschiedener anderer Mechanismen implementiert werden. Zu Beispielen für geeignete Mechanismen zählen, ohne darauf beschränkt zu sein, Lookup-Tabellen, Hardware-Implementierungen, programmierbare Logikarrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs, Read Only Memories) usw. In einer Ausführungsform enthält der Kern 1090 ein Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 1040 oder anderweitig in der Front-End-Einheit 1030). Die Decodierungseinheit 1040 ist mit einer Umbenennungs-/Zuordnungseinheit 1052 in der Ausführungs-Engine-Einheit 1050 gekoppelt.
  • Die Ausführungs-Engine-Einheit 1050 enthält die Umbenennungs-/Zuordnungseinheit 1052, die mit einer Rückzugseinheit 1054 und einem Satz aus einer oder mehreren Scheduler-Einheit(en) 1056 gekoppelt ist. Die Scheduler-Einheit(en) 1056 stellen irgendeine Anzahl von unterschiedlichen Schedulern dar, einschließlich Reservierungsstationen, ein zentrales Befehlsfenster usw. Die Scheduler-Einheit(en) 1056 sind mit der/den physikalischen Registerdatei(en)-Einheit(en) 1058 gekoppelt. Jede der physikalischen Registerdatei(en)-Einheit(en) 1058 stellt eine oder mehrere physikalische Registerdatei(en) dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie zum Beispiel skalare Ganzzahlen, skalare Gleitkommazahlen, gepackte Ganzzahlen, gepackte Gleitkommazahlen, Vektor-Ganzzahlen, Vektor-Gleitkommazahlen, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physikalische Registerdatei(en)-Einheit 1058 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische(n) Registerdatei(en)-Einheit(en) 1058 wird bzw. werden von der Rückzugseinheit 1054 überlappt, um verschiedene Weisen zu veranschaulichen, in denen Registerumbenennung und Out-Of-Order-Ausführung implementiert werden können (z. B. unter Verwendung von Neuordnungspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Zukunftsdatei(en), von Verlaufspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Registerabbildungen und eines Pools von Registern usw.). Die Rückzugseinheit 1054 und die physikalische(n) Registerdatei(en)-Einheit(en) 1058 sind mit dem/den Ausführungs-Cluster(n) 1060 gekoppelt. Der/die Ausführungs-Cluster 1060 enthalten einen Satz von einer oder mehreren Ausführungseinheiten 1062 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1064. Die Ausführungseinheiten 1062 können verschiedene Operationen (zum Beispiel Verschiebungen, Addition, Subtraktion, Multiplikation) und auf verschiedenen Datentypen (zum Beispiel skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) durchführen. Während einige Ausführungsformen eine Reihe 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 enthalten, die alle alle Funktionen durchführen. Die Scheduler-Einheit(en) 1056, die physikalischen Registerdatei(en)-Einheit(en) 1058 und die Ausführungs-Cluster 1060 werden als möglicherweise eine Mehrzahl gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erzeugen (z. B. eine Pipeline für skalare Ganzzahl, eine Pipeline für skalares Gleitkomma/gepackte Ganzzahl/gepacktes Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physikalische Registerdatei(en)-Einheit und/oder Ausführungs-Cluster aufweisen - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1064 aufweist). Es versteht sich auch, dass bei Verwendung separater Pipelines eine oder mehrere dieser Pipelines Out-Of-Order-Ausgabe/-Ausführungs-Pipelines und der Rest In-Order-Pipelines sein können.
  • Der Satz von Speicherzugriffseinheiten 1064 ist mit der Speichereinheit 1070 gekoppelt, die eine Daten-TLB-Einheit 1072 enthält, die mit einer Daten-Cache-Einheit 1074 gekoppelt ist, die mit Level-2- (L2-) Cache-Einheit 1076 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1064 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit enthalten, die jeweils mit der Daten-TLB-Einheit 1072 in der Speichereinheit 1070 gekoppelt sind. Die Befehls-Cache-Einheit 1034 ist des Weiteren mit einer Level-2- (L2-) Cache-Einheit 1076 in der Speichereinheit 1070 gekoppelt. Die L2-Cache-Einheit 1076 ist mit einem oder mehreren anderen Cache-Levels und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-Out-Of-Order-Ausgabe/-Ausführungskemarchitektur die Pipeline 1000 wie folgt implementieren: 1) das Befehlsabrufen 1038 führt die Abruf- und Längendecodierstufen 1002 und 1004 durch; 2) die Decodiereinheit 1040 führt die Decodierstufe 1006 durch; 3) die Umbenennungs-/Allokator-Einheit 1052 führt die Zuordnungsstufe 1008 und die Umbenennungsstufe 1010 durch; 4) die Scheduler-Einheit(en) 1056 führt bzw. führen die Schedule-Stufe 1012 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 1058 und die Speichereinheit 1070 führen die Registerlese/Speicherlesestufe 1014 durch; der Ausführungs-Cluster 1060 führt die Ausführungsstufe 1016 durch; 6) die Speichereinheit 1070 und die physikalischen Registerdatei(en)-Einheit(en) 1058 führen die Zurückschreib-/Speicherschreibstufe 1018 durch; 7) verschiedene Einheiten können in der Ausnahmebehandlungsstufe 1022 einbezogen sein; und 8) die Rückzugseinheit 1054 und die physikalischen Registerdatei(en)-Einheit(en) 1058 führt bzw. führen die Übergabestufe 1024 durch.
  • Der Kern 1090 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt worden sind), den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, Kalifornien, den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie zum Beispiel NEON) von ARM Holdings, Sunnyvale, Kalifornien), einschließlich des bzw. der hier beschriebenen Befehl(e). In einer Ausführungsform enthält der Kern 1090 Logik, um eine gepackte Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2) zu unterstützen, wodurch gestattet wird, dass die Operationen, die von vielen Multimedia-Applikationen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Operationen oder Threads) unterstützt und dies auf vielerlei Arten tun kann, einschließlich Zeitscheiben-Multithreading, simultanes Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physikalische Kern ein simultanes Multithreading durchführt) oder einer Kombination davon (z. B. Zeitscheiben-Abrufen und -Decodieren und simultanes Multithreading danach, wie bei der Intel® Hyperthreading-Technologie).
  • Während die Registerumbenennung im Kontext der Out-Of-Order-Ausführung beschrieben ist, versteht es sich, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 1034/1074 und eine gemeinsam genutzte L2-Cacheeinheit 1076 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie zum Beispiel einen internen Level-1-(L1-) Cache oder mehrere interne Cache-Level. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der extern zum Kern und/oder zum Prozessor ist, enthalten. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Beispielhafte spezifische In-Order-Kernarchitektur
  • Die 11A - 11B veranschaulichen ein Blockdiagramm einer spezifischeren, beispielhaften In-Order-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderen Kernen des gleichen Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger Logik mit fester Funktion, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, abhängig von der Anwendung.
  • Die 11A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung zum On-Die-Verbindungsnetzwerk 1102 und seinem lokalen Teilsatz des Level-2- (L2-) Cache 1104 entsprechend einer Ausführungsform. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1100 den x86-Befehlssatz mit einer gepackten Daten-Befehlssatz-Erweiterung. Ein L1-Cache 1106 gestattet Zugriffe mit geringer Latenzzeit auf Cachespeicher in die skalaren und Vektoreinheiten. Obwohl in einer Ausführungsform (um den Entwurf zu vereinfachen) eine skalare Einheit 1108 und eine Vektoreinheit 1110 separate Registersätze verwenden (skalares Register 1112 bzw. Vektorregister 1114) und zwischen ihnen übertragene Daten in Speicher geschrieben und dann von einem Level-1- (L1-) Cache 1106 wieder eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad enthalten, der gestattet, dass Daten zwischen den beiden Registerdateien übertragen werden, ohne dass sie geschrieben und zurückgelesen werden).
  • Der lokale Teilsatz des L2-Caches 1104 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze aufgeteilt ist, einer je Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 1104 auf. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Teilsatz 1104 gespeichert, und es kann schnell auf sie zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Teilsatz 1104 gespeichert und, falls nötig, aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen Logikblöcken, zu gestatten, miteinander im Chip zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bits breit.
  • Die 11B ist eine erweiterte Ansicht eines Teils des Prozessorkerns der 11A entsprechend einer Ausführungsform. Die 11B beinhaltet einen L1-Daten-Cache 1106A, der Teil des L1-Caches 1104 ist, ebenso wie mehr Details hinsichtlich der Vektoreinheit 1110 und der Vektorregister 1114. Insbesondere ist die Vektoreinheit 1110 eine 16-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 1128), die einen oder mehrere der folgenden Befehle ausführt: Ganzzahlbefehle, Gleitkommabefehle mit einfacher Genauigkeit und Gleitkommabefehle mit doppelter Genauigkeit. Die VPU unterstützt Swizzling der Registereingänge mit der Swizzle-Einheit 1120, numerische Konvertierung mit den numerischen Konvertierungseinheiten 1122A - B und Replikation mit der Replikationseinheit 1124 auf dem Speichereingang. Schreibmaskenregister 1126 gestatten das Prädizieren resultierender Vektorschreibvorgänge.
  • Die 12 ist ein Blockdiagramm eines Prozessors 1200, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafiken aufweisen kann, entsprechend einer Ausführungsform. Die Kästen mit durchgezogenen Linien in der 12 veranschaulichen einen Prozessor 1200 mit einem einzelnen Kern 1202A, einen Systemagenten 1210, einen Satz einer oder mehrerer Bussteuerungseinheiten 1216, während das optionale Hinzufügen von Kästen mit gestrichelten Linien einen alternativen Prozessor 1200 mit mehreren Kernen 1202A - N, einen Satz einer oder mehrerer integrierter Speichersteuerungseinheit(en) 1214 in der Systemagenteneinheit 1210 und Speziallogik 1208 darstellt.
  • Somit können unterschiedliche Implementierungen des Prozessors 1200 Folgendes enthalten: 1) eine CPU mit der Speziallogik 1208, die integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik ist (die einen oder mehrere Kerne enthalten kann), und mit den Kernen 1202A - N, die einer oder mehrere Universalkerne sind (z. B. Universal-In-Order-Kerne, Universal-Out-Of-Order-Kerne, eine Kombination aus den beiden); 2) einen Koprozessor mit den Kernen 1202A - N, die eine große Anzahl von Spezialkernen sind, die vor allem für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Koprozessor mit den Kernen 1202A - N, die eine große Anzahl von Universal-In-Order-Kernen sind. Somit kann der Prozessor 1200 ein Universalprozessor, Koprozessor oder spezieller Prozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU (Universalgrafikverarbeitungseinheit, General Purpose Graphics Processing Unit), ein Koprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC, Many Integrated Core) (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder Ähnliches. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1200 kann ein Teil von und/oder auf einem oder mehreren Substraten unter Verwendung irgendeiner aus einer Reihe von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, implementiert sein.
  • Die Speicherhierarchie enthält einen oder mehrere Cache-Level in den Kernen, einen Satz von oder eine oder mehrere gemeinsam genutzte Cacheeinheiten 1206 und externen Speicher (nicht gezeigt), der gekoppelt mit dem Satz integrierter Speichersteuerungseinheiten 1214 ist. Der Satz von gemeinsam genutzten Cache-Einheiten 1206 kann einen oder mehrere Mid-Level-Caches enthalten, wie zum Beispiel Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 1212 die integrierte Grafiklogik 1208, den Satz gemeinsam genutzter Cache-Einheiten 1206 und die Systemagenteneinheit 1210/die integrierte(n) Speichersteuerungseinheit(en) 1214 verbindet, können alternative Ausführungsformen irgendeine Anzahl an allgemein bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cache-Einheiten 1206 und den Kernen 1202A - N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1202A - N zum Multithreading in der Lage. Der Systemagent 1210 enthält diejenigen Komponenten, die die Kerne 1202A - N koordinieren und betreiben. Die Systemagenteneinheit 1210 kann zum Beispiel eine Leistungssteuereinheit (PCU, Power Control Unit) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die zum Regeln des Leistungszustands der Kerne 1202A - N und der integrierten Grafiklogik 1208 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1202A - N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1202A - N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • Die 13 - 16 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere im Fachgebiet bekannte Systementwürfe und Konfigurationen für Laptops, Desktops, handgeführte PCs, Personal Digital Assistants, Engineering-Arbeitsstationen, Server, Netzwerkeinrichtungen, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digital-Signal-Prozessoren (DSPs), Grafikeinrichtungen, Videospieleinrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Mediaplayer, handgeführte Einrichtungen und verschiedene andere elektronische Einrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl an Systemen oder elektronischen Einrichtungen, die zur Aufnahme eines Prozessors und/oder anderer Ausführungslogik, wie hier offenbart, in der Lage sind, allgemein geeignet.
  • Jetzt unter Bezug auf die 13: Es wird ein Blockdiagramm eines Systems 1300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1300 kann einen oder mehrere Prozessoren 1310, 1315 enthalten, die mit einem Controller-Hub 1320 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 1320 einen Grafikspeicher-Controller-Hub (GMCH, Graphics Memory Controller Hub) 1390 und einen Eingabe-/Ausgabe-Hub (IOH, Input/Output Hub) 1350 (die sich auf separaten Chips befinden können); der GMCH 1390 enthält Speicher- und Grafiksteuerungen, mit denen Speicher 1340 und ein Koprozessor 1345 gekoppelt sind; der IOH 1350 koppelt die Eingabe-/Ausgabe- (E/A-) Einrichtungen 1360 mit dem GMCH 1390. Alternativ sind einer oder beide, die Speicher- und/oder die Grafiksteuerung, in den Prozessor integriert (wie hier beschrieben), der Speicher 1340 und der Koprozessor 1345 sind direkt mit dem Prozessor 1310 gekoppelt, und der Controller-Hub 1320 befindet sich in einem einzelnen Chip mit dem IOH 1350.
  • Der optionale Charakter der zusätzlichen Prozessoren 1315 wird in der 13 durch unterbrochene Linien gekennzeichnet. Jeder Prozessor 1310, 1315 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 1200 sein.
  • Der Speicher 1340 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), ein Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. In wenigstens einer Ausführungsform kommuniziert der Controller-Hub 1320 mit dem/den Prozessor(en) 1310, 1315 über einen Multi-Drop-Bus, wie zum Beispiel einem Front Side Bus (FSB), einer Punkt-zu-Punkt-Schnittstelle, wie zum Beispiel QuickPath Interconnect (QPI), oder einer ähnlichen Verbindung 1395.
  • In einer Ausführungsform ist der Koprozessor 1345 ein Spezialprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches. In einer Ausführungsform kann der Controller-Hub 1320 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann eine Vielzahl von Unterschieden zwischen den physikalischen Ressourcen 1310, 1315 im Hinblick auf ein Spektrum von relevanten Metriken geben, einschließlich architektonischer, mikroarchitektonischer, thermischer, Stromverbrauchscharakteristika und Ähnliches.
  • In einer Ausführungsform führt der Prozessor 1310 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Befehle können Koprozessor-Befehle eingebettet sein. Der Prozessor 1310 erkennt diese Koprozessor-Befehle als einem Typ zugehörig, der vom verbundenen Koprozessor 1345 ausgeführt werden soll. Entsprechend gibt der Prozessor 1310 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellen) auf einem Koprozessorbus oder einer anderen Verbindung an den Koprozessor 1345 aus. Der/die Koprozessor(en) 1345 nehmen die empfangenen Koprozessor-Befehle an und führen sie aus.
  • Jetzt unter Bezug auf die 14: Es wird ein Blockdiagramm eines beispielhaften ersten spezifischeren Systems 1400 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in der 14 gezeigt wird, ist das Multiprozessorsystem 1400 ein Punkt-zu-Punkt-Verbindungssystem und enthält einen ersten Prozessor 1470 und einen zweiten Prozessor 1480, die über eine Punkt-zu-Punkt-Verbindung 1450 gekoppelt sind. Jeder der Prozessoren 1470 und 1480 kann eine Version des Prozessors 1200 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1470 und 1480 die Prozessoren 1310 bzw. 1315, während der Koprozessor 1438 der Koprozessor 1345 ist. In einer anderen Ausführungsform sind die Prozessoren 1470 und 1480 der Prozessor 1310 bzw. der Koprozessor 1345.
  • Die Prozessoren 1470 und 1480 werden so gezeigt, dass sie die integrierten Speichersteuerungs- (IMC) Einheiten 1472 bzw. 1482 enthalten. Der Prozessor 1470 enthält als Teil seiner Bus-Steuerungseinheiten auch Punkt-zu-Punkt- (P-P-) Schnittstellen 1476 und 1478; gleichermaßen enthält der zweite Prozessor 1480 die P-P-Schnittstellen 1486 und 1488. Die Prozessoren 1470 und 1480 können Informationen über eine Punkt-zu-Punkt- (P-P-) Schnittstelle 1450 unter Verwendung der P-P-Schnittstellenschaltungen 1478, 1488 austauschen. Wie in der 14 gezeigt wird, koppeln IMCs 1472 und 1482 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1432 und einem Speicher 1434, die Teile eines Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
  • Die Prozessoren 1470, 1480 können jeweils Informationen mit einem Chipsatz 1490 über einzelne P-P-Schnittstellen 1452, 1454 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 1476, 1494, 1486, 1498 austauschen. Der Chipsatz 1490 kann optional Informationen mit dem Koprozessor 1438 über eine Hochleistungsschnittstelle 1439 austauschen. Bei einer Ausführungsform ist der Koprozessor 1438 ein Spezialprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in beiden Prozessoren oder außerhalb der beiden Prozessoren enthalten sein, jedoch über eine P-P-Verbindung mit den Prozessoren verbunden sein, so dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 1490 kann über eine Schnittstelle 1496 mit einem erstem Bus 1416 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1416 ein Peripheral Component Interconnect (PCI-) Bus oder ein Bus, wie zum Beispiel ein PCI-Express-Bus, oder ein anderer E/A-Verbindungsbus der dritten Generation sein, obwohl der Schutzbereich der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in der 14 gezeigt wird, können verschiedene E/A-Einrichtungen 1414 mit dem ersten Bus 1416 gekoppelt sein, zusammen mit einer Busbrücke 1418, die den ersten Bus 1416 mit einem zweiten Bus 1420 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 1415, wie zum Beispiel Koprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder Digital-Signal-Verarbeitungs- (DSP-) Einheiten), Field Programmable Gate Arrays oder irgendein anderer Prozessor, mit dem ersten Bus 1416 gekoppelt. In einer Ausführungsform kann der zweite Bus 1420 ein Low-Pin-Count (LPC-) Bus sein. Verschiedene Einrichtungen können in einer Ausführungsform mit einem zweiten Bus 1420 gekoppelt sein, einschließlich zum Beispiel einer Tastatur und/oder einer Maus 1422, Kommunikationseinrichtungen 1427 und einer Speichereinheit 1428, wie zum Beispiel einem Festplattenlaufwerk oder einer anderen Massenspeichereinrichtung, die Befehle/Code und Daten 1430 beinhalten kann. Des Weiteren kann die Audio-E/A 1424 mit dem zweiten Bus 1420 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Punkt-zu-Punkt-Architektur der 14 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Jetzt unter Bezug auf die 15: Es wird ein Blockdiagramm eines beispielhaften zweiten, spezifischeren Systems 1500 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in den 14 und 15 führen ähnliche Bezugszeichen, und bestimmte Aspekte der 14 wurden in der 15 weggelassen, um zu vermeiden, dass andere Aspekte der 15 in den Hintergrund treten.
  • Die 15 veranschaulicht, dass die Prozessoren 1470, 1480 integrierte Speicher- und E/A-Steuerlogik („CL“) 1472 bzw. 1482 enthalten können. Somit enthalten die CL 1472, 1482 integrierte Speichersteuerungseinheiten und E/A-Steuerlogik. Die 15 veranschaulicht, dass nicht nur die Speicher 1432, 1434 mit den CL 1472, 1482 gekoppelt sind, sondern dass auch die E/A-Einrichtungen 1514 mit der Steuerlogik 1472, 1482 gekoppelt sind. Legacy-E/A-Einrichtungen 1515 sind mit dem Chipsatz 1490 gekoppelt.
  • Jetzt unter Bezug auf die 16: Es wird ein Blockdiagramm eines SoC 1600 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in der 12 führen ähnliche Bezugszeichen. Kästen mit gestrichelten Linien sind ebenfalls optionale Merkmale auf weiterentwickelten SoCs. In der 16 ist/sind Verbindungseinheit(en) 1602 mit Folgenden gekoppelt: einem Anwendungsprozessor 1610, der einen Satz aus einem oder mehreren Kernen 202A - N und gemeinsam genutzte Cache-Einheit(en) 1206 enthält; einer Systemagenteneinheit 1210; einer oder mehreren Bussteuerungseinheit(en) 1216; einer oder mehreren integrierten Speichersteuerungseinheit(en) 1214; einem Satz aus einem oder mehreren Koprozessoren 1620, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten können; einer statischen Direktzugriffsspeicher- (Static Random Access Memory, SRAM-) Einheit 1630; einer Direktzugriffsspeicher- (Direct Memory Access, DMA-) Einheit 1632; und einer Anzeigeeinheit 1640 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform enthält/enthalten der/die Koprozessor(en) 1620 einen Spezialprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder Ähnliches.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, der auf programmierbaren Systemen ausgeführt wird, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), wenigstens ein Eingabegerät und wenigstens ein Ausgabegerät umfassen.
  • Programmcode, wie zum Beispiel der Code 1430, der in der 14 veranschaulicht wird, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabeeinrichtungen angewendet werden. Für die Zwecke dieser Anwendung enthält ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel einen Digital-Signal-Prozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (Application Specific Integrated Circuit, ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in einer Assembler- oder Maschinensprache implementiert sein, wenn dies gewünscht ist. Tatsächlich ist der Schutzbereich der hier beschriebenen Mechanismen nicht auf irgendeine besondere Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Einer oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik im Prozessor darstellt, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik zum Durchführen der hier beschriebenen Techniken herstellt. Derartige Darstellungen, als „IP-Kerne“ bekannt, können auf einem dinghaften maschinenlesbaren Medium gespeichert sein und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, die tatsächlich die Logik oder den Prozessor herstellen.
  • Zu solchen maschinenlesbaren Speichermedien können, ohne darauf beschränkt zu sein, Folgende zählen: nichtflüchtige dinghafte Anordnungen von Gegenständen, die von einer Maschine oder einer Einrichtung hergestellt oder gebildet werden, einschließlich Speichermedien, wie zum Beispiel Festplatten, irgendein anderer Typ Disk, einschließlich Floppydisks, optischer Disks, CD-ROMs (Compact Disk Read-Only Memories), CD-RWs (Compact Disk Rewritables) und magnetooptischer Disks, Halbleitereinrichtungen, wie zum Beispiel ROMs (Read-Only Memories), RAMs (Random Access Memories), wie zum Beispiel DRAMs (Dynamic Random Access Memories), SRAMs (Static Random Access Memories), EPROMs (Erasable Programmable Read-Only Memories), Flash-Speicher, EEPROMs (Electrically Erasable Programmable Read-Only Memories), PCM (Phase Change Memory), magnetische oder optische Karten oder irgendein anderer Typ Medien, die zum Speichern von elektronischen Befehlen geeignet sind.
  • Dementsprechend zählen zu Ausführungsformen der Erfindung auch nichtflüchtige dinghafte maschinenlesbare Medien, die Befehle enthalten oder Entwurfsdaten enthalten, wie zum Beispiel eine Hardware-Beschreibungssprache (Hardware Description Language, HDL), die die hier beschriebenen Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz zu konvertieren. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle, die vom Kern verarbeitet werden sollen, übersetzen (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilierung), morphen, emulieren oder auf andere Weise konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • Die 17 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlskonverters zum Konvertieren binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz entsprechend einer Ausführungsform gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlskonverter ein Software-Befehlskonverter, obwohl der Befehlskonverter alternativ dazu in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 17 zeigt, dass ein Programm in einer Hochsprache 1702 unter Verwendung eines x86-Compilers 1704 kompiliert werden kann, um den x86-Binärcode 1706 zu generieren, der von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 1716 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 1716 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Applikationen oder anderer Software, die zum Laufen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern vorgesehen ist, kompatibel ausführt oder anders verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 1704 stellt einen Compiler dar, der dazu betrieben werden kann, den x86-Binärcode 1706 (z. B. Objektcode) zu generieren, der auf dem Prozessor mit wenigstens einem x86-Befehlssatzkern 1716 mit oder ohne zusätzliche Verknüpfungsverarbeitung ausgeführt werden kann. Gleichermaßen zeigt die 17, dass das Programm in der Hochsprache 1702 unter Verwendung eines alternativen Befehlssatz-Compilers 1708 kompiliert werden kann, um den alternativen Befehlssatzbinärcode 1710 zu erzeugen, der von einem Prozessor ohne wenigstens einen x86-Befehlssatzkern 1714 (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings, Sunnyvale, Kalifornien ausführen) nativ ausgeführt werden kann. Der Befehlskonverter 1712 wird zum Umwandeln des x86-Binärcodes 1706 in Code verwendet, der vom Prozessor ohne einen x86-Befehlssatzkern 1714 nativ ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 1710, weil ein Befehlskonverter, der dazu in der Lage ist, schwierig herzustellen ist; allerdings wird der konvertierte Code die allgemeine Operation erledigen und aus Befehlen aus dem alternativen Befehlssatz zusammengesetzt sein. Somit stellt der Befehlskonverter 1712 Software, Firmware, Hardware oder eine Kombination daraus dar, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Einrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, gestattet, den x86-Binärcode 1706 auszuführen.
  • Um das hier offenbarte Verfahren und die Vorrichtungen besser zu veranschaulichen, wird hier eine nicht einschränkende Liste von Ausführungsformen bereitgestellt.
  • Das Beispiel 1 ist ein hardwarebeschleunigtes (HWA-) Matrix-Solve-System, das Folgendes umfasst: einen Abruf-A-Block zum Abfragen und Bereitstellen eines Abschnitts einer Matrix A; und einen Matrixspaltenberechnungsblock, der Folgendes enthält: einen X-Pufferblock, um wenigstens einen Wert einer Matrix A abzurufen; einen In-Spalten-Parallelberechnungsblock, um mehrere partielle Skalarprodukte auf Basis des Abschnitts der Matrix A und wenigstens eines Wertes der Matrix X zu generieren; und einen Seriellberechnungsblock, um ein neues Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte zu generieren, wobei das neue Element der Matrix X dem X-Pufferblock zum Speichern in einem Speicher bereitgestellt wird.
  • Im Beispiel 2 enthält der Gegenstand des Beispiels 1 optional den Matrixspaltenberechnungsblock, der einen Abruf-B-Block enthält, um ein Matrix-B-Element abzufragen und dem Parallelberechnungsblock bereitzustellen.
  • Im Beispiel 3 enthält der Gegenstand des Beispiels 2 optional den Parallelberechnungsblock, der einen Negationsblock enthält, um ein negiertes Matrix-B-Element zu generieren.
  • Im Beispiel 4 enthält der Gegenstand des Beispiels 3 optional den Seriellberechnungsblock, um des Weiteren einen Matrix-Solve-Differenzwert auf Basis einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte zu generieren.
  • Im Beispiel 5 beinhaltet der Gegenstand des Beispiels 4 optional, dass der Seriellberechnungsblock einen Matrixmultipliziererblock enthält, um das neue Element der Matrix X durch Multiplizieren des Matrix-Solve-Differenzwerts mit einer Matrix-A-Inversen zu generieren, wobei die Matrix-A-Inverse aus dem Parallelberechnungsblock am Seriellberechnungsblock empfangen wird.
  • Im Beispiel 6 beinhaltet der Gegenstand des Beispiels 5 optional, dass der Matrixmultipliziererblock einen Multi-Cycle-Path-Multipliziererblock enthält.
  • Im Beispiel 7 beinhaltet der Gegenstand eines oder mehrerer der Beispiele 5 - 6 optional, dass der Abruf-A-Block des Weiteren dazu dient, die Matrix-A-Inverse abzufragen und dem Parallelberechnungsblock bereitzustellen; und dass der Parallelberechnungsblock des Weiteren dazu dient, die Matrix-A-Inverse zu empfangen und die Matrix-A-Inverse dem Seriellberechnungsblock bereitzustellen.
  • Im Beispiel 8 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 5 - 7 optional, dass der Abruf-A-Block des Weiteren dazu dient, eine nicht invertierte Matrix A abzufragen und dem Parallelberechnungsblock bereitzustellen; und dass der Parallelberechnungsblock des Weiteren einen Matrixinversenblock enthält, um die Matrix-A-Inverse auf Basis der nicht invertierten Matrix A zu generieren.
  • Im Beispiel 9 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 8 optional, dass der Abruf-A-Block Folgendes enthält: ein Abruf-A-Speicheradressregister, um eine Speicheradressanforderung des Abschnitts der Matrix A zu senden; und einen FIFO-Puffer für das Abruf-A-Speicherdatenregister, um den Abschnitt der Matrix A zu speichern und bereitzustellen.
  • Im Beispiel 10 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 2 - 9 optional, dass der Abruf-B-Block Folgendes enthält: ein Abruf-B-Speicheradressregister, um eine Speicheradressanforderung für das Matrix-B-Element zu senden; und einen Abruf-B-Speicherdatenregister-First-In-First-Out-(FIFO-) Puffer, um das Matrix-B-Element zu speichern und bereitzustellen.
  • Im Beispiel 11 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 10 optional, dass der bestimmte Wert der Matrix X wenigstens einen der folgenden Werte enthält, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  • Im Beispiel 12 beinhaltet der Gegenstand des Beispiels 11 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0008
  • Im Beispiel 13 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 11 - 12 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0009
  • Im Beispiel 14 enthält der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 13 optional mehrere Spaltenberechnungsblöcke, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  • Im Beispiel 15 enthält der Gegenstand des Beispiels 14 optional mehrere Speicherarbiter, um mehrere Spalten-Speicherzugriffsanforderungen aus den mehreren Spaltenberechnungsblöcken zu arbitrieren.
  • Im Beispiel 16 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 15 optional, dass der Parallelberechnungsblock einen negativen Multiply-and-Accumulate- (MAC-) Block enthält, um den Abschnitt der Matrix B zu negieren.
  • Im Beispiel 17 enthält der Gegenstand des Beispiels 16 optional, dass der Parallelberechnungsblock mehrere partielle Skalarproduktblöcke enthält, um die mehreren partiellen Skalarprodukte zu bestimmen.
  • Im Beispiel 18 beinhaltet der Gegenstand des Beispiels 17 optional, dass jeder der mehreren partiellen Skalarproduktblöcke einen Spalten-MAC, ein Spalten-FIFO und ein Diagonalelement-FIFO enthält.
  • Im Beispiel 19 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 18 optional, dass der Seriellberechnungsblock einen seriellen MAC enthält, um die mehreren partiellen Skalarprodukte zu empfangen und das neue Element der Matrix X zu bestimmen.
  • Im Beispiel 20 beinhaltet der Gegenstand des Beispiels 19 optional Folgendes: dass der bestimmte Wert der Matrix X den Vorwärtssubstitutionswert enthält; und dass das Bestimmen des neuen Elements der Matrix X Folgendes beinhaltet: ein neues Element der Matrix X für jede von mehreren Zeilen in der Matrix X auf Basis wenigstens eines der empfangenen mehreren partiellen Skalarprodukte zu bestimmen; und ein zusätzliches Skalarprodukt auf Basis eines vorher bestimmten neuen Elements der Matrix X zu bestimmen.
  • Im Beispiel 21 beinhaltet der Gegenstand des Beispiels 20 optional, dass: der bestimmte Wert der Matrix X den Rückwärtssubstitutionswert enthält und das Bestimmen des neuen Elements der Matrix X beinhaltet, die empfangenen mehreren partiellen Skalarprodukte zu akkumulieren.
  • Im Beispiel 22 beinhaltet der Gegenstand des Beispiels 21 optional, dass der Seriellberechnungsblock des Weiteren einen Multi-Cycle-Path- (MCP-) Multiplizierer enthält, um die empfangenen mehreren partiellen Skalarprodukte zu akkumulieren.
  • Im Beispiel 23 beinhaltet der Gegenstand des Beispiels 22 optional, dass der Seriellberechnungsblock des Weiteren einen Seriellnegationsblock enthält, um die akkumulierten empfangenen mehreren partiellen Skalarprodukte zu negieren.
  • Im Beispiel 24 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 1 - 23 optional, dass der X-Pufferblock einen lokalen Spaltenpuffer und einen Vorabrufpuffer enthält, um den wenigstens einen Wert einer Matrix X abzurufen und dem Parallelberechnungsblock bereitzustellen.
  • Das Beispiel 25 ist ein hardwarebeschleunigtes (HWA-) Matrix-Solve-Verfahren, das Folgendes umfasst: einen Abschnitt einer Matrix A an einem Abruf-A-Block einem Matrixspaltenberechnungsblock bereitzustellen; und ein neues Element der Matrix X am Matrixspaltenberechnungsblock zu generieren, einschließlich: wenigstens einen Wert einer Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock abzurufen; mehrere partielle Skalarprodukte an einem In-Spalten-Parallelberechnungsblock im Matrixspaltenberechnungsblock zu generieren, wobei die mehreren partiellen Skalarprodukte auf Basis des Abschnitts der Matrix A und auf dem wenigstens einen Wert der Matrix X bestimmt werden; und das neue Element der Matrix X an einem Seriellberechnungsblock im Matrixspaltenberechnungsblock zu generieren, wobei das neue Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte bestimmt wird.
  • Im Beispiel 26 beinhaltet der Gegenstand des Beispiels 25 optional, ein Matrix-B-Element an einem Abruf-B-Block im Matrixspaltenberechnungsblock abzurufen; das Matrix-B-Element vom Abruf-B-Block zum Parallelberechnungsblock zu senden; ein negiertes Matrix-B-Element an einem Negationsblock im Parallelberechnungsblock zu generieren; und einen Matrix-Solve-Differenzwert am Seriellberechnungsblock zu generieren, wobei der Matrix-Solve-Differenzwert auf einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte basiert.
  • Im Beispiel 27 beinhaltet der Gegenstand des Beispiels 26 optional, eine Matrix-A-Inverse aus dem Parallelberechnungsblock am Seriellberechnungsblock zu empfangen, wobei Generieren des neuen Elements der Matrix X beinhaltet, den Matrix-Solve-Differenzwert mit der Matrix-A-Inversen an einem Matrixmultipliziererblock im Seriellberechnungsblock zu multiplizieren.
  • Im Beispiel 28 beinhaltet der Gegenstand des Beispiels 27 optional, dass der Matrixmultipliziererblock einen Multi-Cycle-Path-Multipliziererblock enthält.
  • Im Beispiel 29 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 27 - 28 optional, dass Empfangen einer Matrix-A-Inversen vom Parallelberechnungsblock am Seriellberechnungsblock beinhaltet: die Matrix-A-Inverse am Abruf-A-Block abzufragen; und die Matrix-A-Inverse vom Abruf-A-Block über den Parallelberechnungsblock zum Seriellberechnungsblock zu senden.
  • Im Beispiel 30 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 27 - 29 optional, dass Empfangen einer Matrix-A-Inversen vom Parallelberechnungsblock am Seriellberechnungsblock beinhaltet: eine nicht invertierte Matrix A am Abruf-A-Block abzufragen; die Matrix-A-Inverse auf Basis der nicht invertierten Matrix A an einem Matrixinversenblock im Parallelberechnungsblock zu generieren; und die Matrix-A-Inverse vom Matrixinversenblock zum Seriellberechnungsblock zu senden.
  • Im Beispiel 31 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 30 optional, eine Speicheradressanforderung für den Abschnitt der Matrix A von einem Abruf-A-Speicheradressregister im Abruf-A-Block zu senden; und den Abschnitt der Matrix A an einem Abruf-A-Speicherdatenregister-FIFO-Puffer im Abruf-A-Block zu speichern und bereitzustellen.
  • Im Beispiel 32 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 26 - 31 optional, eine Speicheradressanforderung für den Abschnitt der Matrix B von einem Abruf-B-Speicheradressregister im Abruf-B-Block zu senden; und den Abschnitt der Matrix B an einem Abruf-B-Speicherdatenregister-First-In-First-Out- (FIFO-) Puffer im Abruf-B-Block zu speichern und bereitzustellen.
  • Im Beispiel 33 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 32 optional, dass Bestimmen des Werts der Matrix X beinhaltet, wenigstens einen der folgenden zu bestimmen, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  • Im Beispiel 34 beinhaltet der Gegenstand des Beispiels 33 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0010
  • Im Beispiel 35 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 33 - 34 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0011
  • Im Beispiel 36 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 35 optional, dass der Matrixspaltenberechnungsblock mehrere Spaltenberechnungsblöcke enthält, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  • Im Beispiel 37 beinhaltet der Gegenstand des Beispiels 36 optional, mehrere Spalten-Speicherzugriffsanforderungen aus den mehreren Spaltenberechnungsblöcken an mehreren Speicherarbitern zu arbitrieren.
  • Im Beispiel 38 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 37 optional, den Abschnitt der Matrix B an einem negativen Multiply-and-Accumulate- (MAC-) Block im Parallelberechnungsblock zu negieren.
  • Im Beispiel 39 beinhaltet der Gegenstand des Beispiels 38 optional, die mehreren partiellen Skalarprodukte an mehreren partiellen Skalarproduktblöcken im Parallelberechnungsblock zu bestimmen.
  • Im Beispiel 40 beinhaltet der Gegenstand des Beispiels 39 optional, dass jeder der mehreren partiellen Skalarproduktblöcke einen Spalten-MAC, ein Spalten-FIFO und ein Diagonalelement-FIFO enthält.
  • Im Beispiel 41 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 40 optional, die mehreren partiellen Skalarprodukte an einem seriellen MAC im Seriellberechnungsblock zu empfangen; und das neue Element der Matrix X am seriellen MAC zu bestimmen.
  • Im Beispiel 42 beinhaltet der Gegenstand des Beispiels 41 optional Folgendes: dass der bestimmte Wert der Matrix X den Vorwärtssubstitutionswert enthält; und dass das Bestimmen des neuen Elements der Matrix X Folgendes beinhaltet: ein neues Element der Matrix X für jede von mehreren Zeilen in der Matrix X auf Basis wenigstens eines der empfangenen mehreren partiellen Skalarprodukte zu bestimmen; und ein zusätzliches Skalarprodukt auf Basis eines vorher bestimmten neuen Elements der Matrix X zu bestimmen.
  • Im Beispiel 43 beinhaltet der Gegenstand des Beispiels 42 optional, dass: der bestimmte Wert der Matrix X den Rückwärtssubstitutionswert enthält und das Bestimmen des neuen Elements der Matrix X beinhaltet, die empfangenen mehreren partiellen Skalarprodukte zu akkumulieren.
  • Im Beispiel 44 beinhaltet der Gegenstand des Beispiels 43 optional, die empfangenen mehreren partiellen Skalarprodukte an einem Multi-Cycle-Path-(MCP-) Multiplizierer im Seriellberechnungsblock zu akkumulieren.
  • Im Beispiel 45 beinhaltet der Gegenstand des Beispiels 44 optional, die akkumulierten empfangenen mehreren partiellen Skalarprodukte an einem Seriellnegationsblock im Seriellberechnungsblock zu akkumulieren.
  • Im Beispiel 46 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 25 - 45 optional, den bestimmten Wert der Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock zu empfangen; und den bestimmten Wert der Matrix X am X-Pufferblock in einen Speicher zu schreiben.
  • Im Beispiel 47 beinhaltet der Gegenstand des Beispiels 46 optional, eine lokale Spalte an einem Vorabrufpuffer im X-Pufferblock abzurufen; und die lokale Spalte aus dem Vorabrufpuffer dem Parallelberechnungsblock bereitzustellen.
  • Das Beispiel 48 ist wenigstens ein maschinenlesbares Medium, das Befehle enthält, die, wenn sie von einem Rechnersystem ausgeführt werden, bewirken, dass das Rechnersystem irgendeines der Verfahren der Beispiele 25 - 47 durchführt.
  • Das Beispiel 49 ist eine Vorrichtung, die Mittel zum Durchführen irgendeines der Verfahren der Beispiele 25 - 47 umfasst.
  • Das Beispiel 50 ist wenigstens ein nichtflüchtiges maschinenlesbares Speichermedium, das mehrere Befehle umfasst, die als Reaktion darauf, dass sie mit der Prozessorschaltungsanordnung einer computergesteuerten Einrichtung ausgeführt werden, bewirken, dass die computergesteuerte Einrichtung: einen Abschnitt einer Matrix A an einem Abruf-A-Block einem Matrixspaltenberechnungsblock bereitstellt; und ein neues Element der Matrix X am Matrixspaltenberechnungsblock generiert, einschließlich Befehlen, die bewirken, dass die computergesteuerte Einrichtung: wenigstens einen Wert einer Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock abruft; mehrere partielle Skalarprodukte an einem In-Spalten-Parallelberechnungsblock im Matrixspaltenberechnungsblock generiert, wobei die mehreren partiellen Skalarprodukte auf Basis des Abschnitts der Matrix A und auf dem wenigstens einen Wert der Matrix X bestimmt werden; und das neue Element der Matrix X an einem Seriellberechnungsblock im Matrixspaltenberechnungsblock generiert, wobei das neue Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte bestimmt wird.
  • Im Beispiel 51 beinhaltet der Gegenstand des Beispiels 50 optional, dass die Befehle des Weiteren bewirken, dass die computergesteuerte Einrichtung: ein Matrix-B-Element an einem Abruf-B-Block im Matrixspaltenberechnungsblock abruft; das Matrix-B-Element vom Abruf-B-Block zum Parallelberechnungsblock sendet; ein negiertes Matrix-B-Element an einem Negationsblock im Parallelberechnungsblock generiert; und einen Matrix-Solve-Differenzwert am Seriellberechnungsblock generiert, wobei der Matrix-Solve-Differenzwert auf einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte basiert.
  • Im Beispiel 52 beinhaltet der Gegenstand des Beispiels 51 optional, dass die Befehle des Weiteren bewirken, dass die computergesteuerte Einrichtung eine Matrix-A-Inverse aus dem Parallelberechnungsblock am Seriellberechnungsblock empfängt, wobei die Befehle, die bewirken, dass die computergesteuerte Einrichtung das neue Element der Matrix X generiert, Befehle beinhalten, die des Weiteren bewirken, dass die computergesteuerte Einrichtung den Matrix-Solve-Differenzwert mit der Matrix-A-Inversen an einem Matrixmultipliziererblock im Seriellberechnungsblock multipliziert.
  • Im Beispiel 53 beinhaltet der Gegenstand des Beispiels 52 optional, dass der Matrixmultipliziererblock einen Multi-Cycle-Path-Multipliziererblock enthält.
  • Im Beispiel 54 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 52 - 53 optional, dass die Befehle, die bewirken, dass die computergesteuerte Einrichtung eine Matrix-A-Inverse vom Parallelberechnungsblock am Seriellberechnungsblock empfängt, des Weiteren Befehle enthalten, die bewirken, dass die computergesteuerte Einrichtung: die Matrix-A-Inverse am Abruf-A-Block abfragt; und die Matrix-A-Inverse vom Abruf-A-Block über den Parallelberechnungsblock zum Seriellberechnungsblock sendet.
  • Im Beispiel 55 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 52 - 54 optional, dass die Befehle, die bewirken, dass die computergesteuerte Einrichtung eine Matrix-A-Inverse vom Parallelberechnungsblock am Seriellberechnungsblock empfängt, des Weiteren Befehle beinhalten, die bewirken, dass die computergesteuerte Einrichtung: eine nicht invertierte Matrix A am Abruf-A-Block abfragt; die Matrix-A-Inverse auf Basis der nicht invertierten Matrix A an einem Matrixinversenblock im Parallelberechnungsblock generiert; und die Matrix-A-Inverse vom Matrixinversenblock zum Seriellberechnungsblock sendet.
  • Im Beispiel 56 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 55 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung: eine Speicheradressanforderung für den Abschnitt der Matrix A vom Abruf-A-Speicheradressregister im Abruf-A-Block sendet; und den Abschnitt der Matrix A an einem Abruf-A-Speicherdatenregister-FIFO-Puffer im Abruf-A-Block speichert und bereitstellt.
  • Im Beispiel 57 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 51 - 56 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung: eine Speicheradressanforderung für den Abschnitt der Matrix B von einem Abruf-B-Speicheradressregister im Abruf-B-Block sendet; und den Abschnitt der Matrix B an einem Abruf-B-Speicherdatenregister-First-In-First-Out- (FIFO-) Puffer im Abruf-B-Block speichert und bereitstellt.
  • Im Beispiel 58 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 57 optional, dass die Befehle, die bewirken, dass die computergesteuerte Einrichtung den Wert der Matrix X bestimmt, des Weiteren Befehle beinhalten, die bewirken, dass die computergesteuerte Einrichtung wenigstens einen der Folgenden bestimmt, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  • Im Beispiel 59 beinhaltet der Gegenstand des Beispiels 58 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0012
  • Im Beispiel 60 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 58 - 59 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0013
  • Im Beispiel 61 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 60 optional, dass der Matrixspaltenberechnungsblock mehrere Spaltenberechnungsblöcke enthält, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  • Im Beispiel 62 beinhaltet der Gegenstand des Beispiels 61 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung mehrere Spalten-Speicherzugriffsanforderungen aus den mehreren Spaltenberechnungsblöcken an mehreren Speicherarbitern arbitriert.
  • Im Beispiel 63 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 62 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung den Abschnitt der Matrix B an einem negativen Multiply-and-Accumulate- (MAC-) Block im Parallelberechnungsblock negiert.
  • Im Beispiel 64 beinhaltet der Gegenstand des Beispiels 63 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung die mehreren partiellen Skalarprodukte an mehreren partiellen Skalarproduktblöcken im Parallelberechnungsblock bestimmt.
  • Im Beispiel 65 beinhaltet der Gegenstand des Beispiels 64 optional, dass jeder der mehreren partiellen Skalarproduktblöcke einen Spalten-MAC, ein Spalten-FIFO und ein Diagonalelement-FIFO enthält.
  • Im Beispiel 66 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 65 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung: die mehreren partiellen Skalarprodukte an einem seriellen MAC im Seriellberechnungsblock empfängt; und das neue Element der Matrix X am seriellen MAC bestimmt.
  • Im Beispiel 67 beinhaltet der Gegenstand des Beispiels 66 optional, dass: der bestimmte Wert der Matrix X den Vorwärtssubstitutionswert enthält; und die Befehle, die bewirken, dass die computergesteuerte Einrichtung das neue Element der Matrix X bestimmt, des Weiteren Befehle beinhalten, die bewirken, dass das computergesteuerte Element: ein neues Element der Matrix X für jede von mehreren Zeilen in der Matrix X auf Basis wenigstens eines der empfangenen mehreren partiellen Skalarprodukte bestimmt; und ein zusätzliches Skalarprodukt auf Basis eines vorher bestimmten neuen Elements der Matrix X bestimmt.
  • Im Beispiel 68 beinhaltet der Gegenstand des Beispiels 67 optional, dass: der bestimmte Wert der Matrix X den Rückwärtssubstitutionswert enthält; und die Befehle, die bewirken, dass die computergesteuerte Einrichtung das neue Element der Matrix X bestimmt, Befehle beinhalten, die bewirken, dass die computergesteuerte Einrichtung die empfangenen mehreren partiellen Skalarprodukte akkumuliert.
  • Im Beispiel 69 beinhaltet der Gegenstand des Beispiels 68 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung die empfangenen mehreren partiellen Skalarprodukte an einem Multi-Cycle-Path-(MCP-) Multiplizierer im Seriellberechnungsblock akkumuliert.
  • Im Beispiel 70 beinhaltet der Gegenstand des Beispiels 69 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung die akkumulierten empfangenen mehreren partiellen Skalarprodukte an einem Seriellnegationsblock im Seriellberechnungsblock akkumuliert.
  • Im Beispiel 71 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 50 - 70 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung: den bestimmten Wert der Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock empfängt; und den bestimmten Wert der Matrix X am X-Pufferblock in einen Speicher schreibt.
  • Im Beispiel 72 beinhaltet der Gegenstand des Beispiels 71 optional die Befehle, die des Weiteren bewirken, dass die computergesteuerte Einrichtung: eine lokale Spalte an einem Vorabrufpuffer im X-Pufferblock abruft; und die lokale Spalte aus dem Vorabrufpuffer dem Parallelberechnungsblock bereitstellt.
  • Das Beispiel 73 ist eine hardwarebeschleunigte (HWA-) Matrix-Solve-Vorrichtung, die Folgendes umfasst: Mittel zum Bereitstellen eines Abschnitts einer Matrix A an einem Abruf-A-Block für einen Matrixspaltenberechnungsblock; und Mittel zum Generieren eines neuen Elements der Matrix X am Matrixspaltenberechnungsblock einschließlich: Mittel zum Abrufen wenigstens eines Werts einer Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock; Mittel zum Generieren mehrerer partieller Skalarprodukte an einem In-Spalten-Parallelberechnungsblock im Matrixspaltenberechnungsblock, wobei die mehreren partiellen Skalarprodukte auf Basis des Abschnitts der Matrix A und auf dem wenigstens einen Wert der Matrix X bestimmt werden; und Mittel zum Generieren des neuen Elements der Matrix X an einem Seriellberechnungsblock im Matrixspaltenberechnungsblock, wobei das neue Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte bestimmt wird.
  • Im Beispiel 74 beinhaltet der Gegenstand des Beispiels 73 optional Mittel zum Abrufen eines Matrix-B-Elements an einem Abruf-B-Block im Matrixspaltenberechnungsblock; Mittel zum Senden des Matrix-B-Elements vom Abruf-B-Block zum Parallelberechnungsblock; Mittel zum Generieren eines negierten Matrix-B-Elements an einem Negationsblock im Parallelberechnungsblock; und Mittel zum Generieren eines Matrix-Solve-Differenzwerts am Seriellberechnungsblock, wobei der Matrix-Solve-Differenzwert auf einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte basiert.
  • Im Beispiel 75 beinhaltet der Gegenstand des Beispiels 74 optional Mittel zum Empfangen einer Matrix-A-Inversen aus dem Parallelberechnungsblock am Seriellberechnungsblock, wobei das Mittel zum Generieren des neuen Elements der Matrix X beinhaltet, den Matrix-Solve-Differenzwert mit der Matrix-A-Inversen an einem Matrixmultipliziererblock im Seriellberechnungsblock zu multiplizieren.
  • Im Beispiel 76 beinhaltet der Gegenstand des Beispiels 75 optional, dass der Matrixmultipliziererblock einen Multi-Cycle-Path-Multipliziererblock enthält.
  • Im Beispiel 77 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 75 - 76 optional, dass Mittel zum Empfangen einer Matrix-A-Inversen vom Parallelberechnungsblock am Seriellberechnungsblock beinhalten: Mittel zum Abfragen der Matrix-A-Inversen am Abruf-A-Block; und Mittel zum Senden der Matrix-A-Inversen vom Abruf-A-Block über den Parallelberechnungsblock zum Seriellberechnungsblock.
  • Im Beispiel 78 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 75 - 77 optional, dass Mittel zum Empfangen einer Matrix-A-Inversen vom Parallelberechnungsblock am Seriellberechnungsblock beinhalten: Mittel zum Abfragen einer nicht invertierten Matrix A am Abruf-A-Block; Mittel zum Generieren der Matrix-A-Inversen auf Basis der nicht invertierten Matrix A an einem Matrixinversenblock im Parallelberechnungsblock; und Mittel zum Senden der Matrix-A-Inversen vom Matrixinversenblock zum Seriellberechnungsblock.
  • Im Beispiel 79 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 78 optional Mittel zum Senden einer Speicheradressanforderung für den Abschnitt der Matrix A vom Abruf-A-Speicheradressregister im Abruf-A-Block; und Mittel zum Speichern und Mittel zum Bereitstellen des Abschnitt der Matrix A an einem Abruf-A-Speicherdatenregister-FIFO-Puffer im Abruf-A-Block.
  • Im Beispiel 80 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 74 - 79 optional Mittel zum Senden einer Speicheradressanforderung für den Abschnitt der Matrix B von einem Abruf-B-Speicheradressregister im Abruf-B-Block; und Mittel zum Speichern und Mittel zum Bereitstellen des Abschnitts der Matrix B an einem Abruf-B-Speicherdatenregister-First-In-First-Out- (FIFO-) Puffer im Abruf-B-Block.
  • Im Beispiel 81 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 80 optional, dass Mittel zum Bestimmen des Werts der Matrix X Mittel zum Bestimmen wenigstens eines der folgenden beinhalten, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  • Im Beispiel 82 beinhaltet der Gegenstand des Beispiels 81 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0014
  • Im Beispiel 83 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 81 - 82 optional, dass der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0015
  • Im Beispiel 84 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 83 optional, dass der Matrixspaltenberechnungsblock mehrere Spaltenberechnungsblöcke enthält, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  • Im Beispiel 85 beinhaltet der Gegenstand des Beispiels 84 optional, mehrere Spalten-Speicherzugriffsanforderungen aus den mehreren Spaltenberechnungsblöcken an mehreren Speicherarbitern zu arbitrieren.
  • Im Beispiel 86 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 85 optional, den Abschnitt der Matrix B an einem negativen Multiply-and-Accumulate- (MAC-) Block im Parallelberechnungsblock zu negieren.
  • Im Beispiel 87 beinhaltet der Gegenstand des Beispiels 86 optional Mittel zum Bestimmen der mehreren partiellen Skalarprodukte an mehreren partiellen Skalarproduktblöcken im Parallelberechnungsblock.
  • Im Beispiel 88 beinhaltet der Gegenstand des Beispiels 87 optional, dass jeder der mehreren partiellen Skalarproduktblöcke einen Spalten-MAC, ein Spalten-FIFO und ein Diagonalelement-FIFO enthält.
  • Im Beispiel 89 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 88 optional Mittel zum Empfangen der mehreren partiellen Skalarprodukte an einem seriellen MAC im Seriellberechnungsblock; und Mittel zum Bestimmen des neuen Elements der Matrix X am seriellen MAC.
  • Im Beispiel 90 beinhaltet der Gegenstand des Beispiels 89 optional dass: der bestimmte Wert der Matrix X den Vorwärtssubstitutionswert enthält; und die Mittel zum Bestimmen des neuen Elements der Matrix X Folgendes beinhalten: Mittel zum Bestimmen eines neuen Elements der Matrix X für jede von mehreren Zeilen in der Matrix X auf Basis wenigstens eines der empfangenen mehreren partiellen Skalarprodukte; und Mittel zum Bestimmen eines zusätzlichen Skalarprodukts auf Basis des vorher bestimmten neuen Elements der Matrix X.
  • Im Beispiel 91 beinhaltet der Gegenstand des Beispiels 90 optional, dass: der bestimmte Wert der Matrix X den Rückwärtssubstitutionswert enthält; und die Mittel zum Bestimmen des neuen Elements der Matrix X beinhalten, die empfangenen mehreren partiellen Skalarprodukte zu akkumulieren.
  • Im Beispiel 92 beinhaltet der Gegenstand des Beispiels 91 optional, die empfangenen mehreren partiellen Skalarprodukte an einem Multi-Cycle-Path-(MCP-) Multiplizierer im Seriellberechnungsblock zu akkumulieren.
  • Im Beispiel 93 beinhaltet der Gegenstand des Beispiels 92 optional, die akkumulierten empfangenen mehreren partiellen Skalarprodukte an einem Seriellnegationsblock im Seriellberechnungsblock zu akkumulieren.
  • Im Beispiel 94 beinhaltet der Gegenstand irgendeines oder mehrerer der Beispiele 73 - 93 optional Mittel zum Empfangen des bestimmten Werts der Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock; und Mittel zum Schreiben des bestimmten Werts der Matrix X am X-Pufferblock in einen Speicher.
  • Im Beispiel 95 beinhaltet der Gegenstand des Beispiels 94 optional Mittel zum Abrufen einer lokalen Spalte an einem Vorabrufpuffer im X-Pufferblock; und Mittel zum Bereitstellen der lokalen Spalte aus dem Vorabrufpuffer für dem Parallelberechnungsblock.
  • Das Beispiel 96 ist wenigstens ein maschinenlesbares Medium, das Befehle enthält, die, wenn sie von einer Maschine ausgeführt werden, bewirken, dass die Maschine irgendwelche der Operationen von irgendwelchen der Operationen der Beispiele 1 - 95 durchführt.
  • Das Beispiel 97 ist eine Vorrichtung, die Mittel zum Durchführen irgendeiner der Operationen der Beispiele 1 - 95 umfasst.
  • Das Beispiel 98 ist ein System zum Durchführen der Operationen irgendeines der Beispiele 1 - 95.
  • Das Beispiel 99 ist ein Verfahren zum Umsetzen der Operationen irgendeines der Beispiele 1 - 95.
  • Die obige ausführliche Beschreibung enthält Bezüge auf die zugehörigen Zeichnungen, die einen Teil der ausführlichen Beschreibung bilden. Die Zeichnungen zeigen, auf dem Wege der Veranschaulichung, spezifische Ausführungsformen, in welchen der Gegenstand praktiziert werden kann. Diese Ausführungsformen werden hierin auch als „Beispiele“ bezeichnet. Solche Beispiele können Elemente zusätzlich zu den gezeigten oder beschriebenen enthalten. Allerdings ziehen die gegenwärtigen Erfinder auch Beispiele in Betracht, in denen nur die gezeigten oder beschriebenen Elemente bereitgestellt werden. Außerdem ziehen die gegenwärtigen Erfinder auch Beispiele in Betracht, die irgendeine Kombination oder Umsetzung dieser gezeigten oder beschriebenen Elemente (oder eines oder mehrerer Aspekte von diesen) verwenden, entweder in Bezug auf ein bestimmtes Beispiel (oder eines oder mehrerer Aspekte von diesem) oder in Bezug auf andere hier gezeigte oder beschriebene Beispiele (oder eines oder mehrerer Aspekte von diesen).
  • In diesem Dokument wird der Begriff „ein/eine“ verwendet, wie es in Patentdokumenten üblich ist, um eins oder mehr als eins einzuschließen, unabhängig von anderen Fällen oder Verwendungen von „mindestens ein/eine“ oder „ein/eine oder mehrere“. In diesem Dokument wird der Begriff „oder“ verwendet, um sich auf ein nicht ausschließliches Oder zu beziehen, derart, dass „A oder B“ sowohl „A, aber nicht B“, „B, aber nicht A“ und „A und B“ einschließt, sofern nicht anders angegeben. In diesem Dokument werden die Begriffe „aufweisend“ und „in welchem/welcher“ als Äquivalente der entsprechenden Begriffe „umfassend“ und „wobei“ verwendet. Auch sind in den folgenden Ansprüchen die Begriffe „aufweisend“ und „umfassend“ offen, d. h. ein System, eine Vorrichtung, ein Artikel, eine Zusammensetzung, eine Formulierung oder ein Prozess, die oder der Elemente zusätzlich zu denen einschließt, die nach einem derartigen Begriff in einem Anspruch aufgeführt sind, sollen weiterhin in den Bereich dieses Anspruchs fallen. Außerdem werden in den folgenden Ansprüchen die Begriffe „erster“, „zweiter“ und „dritter“ usw. nur als Bezeichnungen verwendet und sollen ihren Objekten keine numerischen Anforderungen aufzwingen.
  • Die oben genannte Beschreibung soll veranschaulichend und nicht einschränkend sein. Zum Beispiel können die oben beschriebenen Beispiele (oder einer oder mehrere ihrer Aspekte) in Kombination mit einander verwendet werden. Andere Ausführungsformen können verwendet werden, wie zum Beispiel von einem Durchschnittsfachmann nach Durchsicht der obigen Beschreibung. Die Zusammenfassung wird bereitgestellt, um es dem Leser zu gestatten, das Wesen der technischen Offenbarung zügig zu erfassen. Sie wird mit dem Verständnis eingereicht, dass sie nicht dazu verwendet werden wird, um den Schutzbereich oder die Bedeutung der Ansprüche auszudeuten oder einzuschränken. In der obigen ausführlichen Beschreibung können verschiedene Merkmale zusammen gruppiert worden sein, um die Offenbarung zu straffen. Dies sollte nicht so gedeutet werden, dass ein nicht beanspruchtes offenbartes Merkmal wesentlich für irgendeinen Anspruch ist. Stattdessen kann ein erfindungsgemäßer Gegenstand in weniger als allen Merkmalen einer bestimmten offenbarten Ausführungsform liegen. Somit sind die folgenden Ansprüche hierdurch in die detaillierte Beschreibung einbezogen, wobei jeder Anspruch eigenständig als eine separate Ausführungsform gilt, und es wird in Betracht gezogen, dass solche Ausführungsformen miteinander in verschiedenen Kombinationen oder Umsetzungen kombiniert werden können. Der Schutzbereich sollte unter Bezugnahme auf die beigefügten Ansprüche zusammen mit dem vollständigen Umfang von Äquivalenten, zu denen diese Ansprüche berechtigt sind, bestimmt werden.

Claims (25)

  1. Hardwarebeschleunigtes (HWA-) Matrix-Solve-System, das Folgendes umfasst: einen Abruf-A-Block, um einen Abschnitt einer Matrix A abzufragen und bereitzustellen; und einen Matrixspaltenberechnungsblock, der Folgendes enthält: einen X-Pufferblock, um wenigstens einen Wert einer Matrix X abzurufen; einen In-Spalten-Parallelberechnungsblock, um mehrere partielle Skalarprodukte auf Basis des Abschnitts der Matrix A und dem wenigstens einen Wert der Matrix X zu generieren; und einen Seriellberechnungsblock, um ein neues Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte zu generieren, wobei das neue Element der Matrix X dem X-Pufferblock zum Speichern in einem Speicher bereitgestellt wird.
  2. HWA-Matrix-Solve-System nach Anspruch 1, wobei der Matrixspaltenberechnungsblock einen Abruf-B-Block enthält, um ein Matrix-B-Element abzufragen und dem Parallelberechnungsblock bereitzustellen.
  3. HWA-Matrix-Solve-System nach Anspruch 2, wobei der Parallelberechnungsblock einen Negationsblock enthält, um ein negiertes Matrix-B-Element zu generieren.
  4. HWA-Matrix-Solve-System nach Anspruch 3, wobei der Seriellberechnungsblock des Weiteren dazu dient, einen Matrix-Solve-Differenzwert auf Basis einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte zu generieren.
  5. HWA-Matrix-Solve-System nach Anspruch 4, wobei der Seriellberechnungsblock einen Matrixmultipliziererblock enthält, um das neue Element der Matrix X durch Multiplizieren des Matrix-Solve-Differenzwerts mit einer Matrix-A-Inversen zu generieren, wobei die Matrix-A-Inverse aus dem Parallelberechnungsblock am Seriellberechnungsblock empfangen wird.
  6. HWA-Matrix-Solve-System nach Anspruch 5, wobei: der Abruf-A-Block des Weiteren dazu dient, die Matrix-A-Inverse abzufragen und dem Parallelberechnungsblock bereitzustellen; und der Parallelberechnungsblock des Weiteren dazu dient, die Matrix-A-Inverse zu empfangen und die Matrix-A-Inverse dem Seriellberechnungsblock bereitzustellen.
  7. HWA-Matrix-Solve-System nach Anspruch 1, wobei der Abruf-A-Block Folgendes enthält: ein Abruf-A-Speicheradressregister, um eine Speicheradressanforderung des Abschnitts der Matrix A zu senden; und einen Abruf-A-Speicherdatenregister-First-In-First-Out- (FIFO-) Puffer, um den Abschnitt der Matrix A zu speichern und bereitzustellen.
  8. HWA-Matrix-Solve-System nach Anspruch 2, wobei der Abruf-B-Block Folgendes enthält: ein Abruf-B-Speicheradressregister, um eine Speicheradressanforderung für das Matrix-B-Element zu senden; und einen Abruf-B-Speicherdatenregister-FIFO-Puffer, um das Matrix-B-Element zu speichern und bereitzustellen.
  9. HWA-Matrix-Solve-System nach Anspruch 1, wobei der bestimmte Wert der Matrix X wenigstens einen der folgenden Werte enthält, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  10. HWA-Matrix-Solve-System nach Anspruch 9, wobei der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0016
  11. HWA-Matrix-Solve-System nach Anspruch 9, wobei der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0017
  12. HWA-Matrix-Solve-System nach Anspruch 1, das des Weiteren mehrere Spaltenberechnungsblöcke enthält, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  13. Hardwarebeschleunigtes (HWA-) Matrix-Solve-Verfahren, das Folgendes umfasst: einen Abschnitt einer Matrix A an einem Abruf-A-Block für einen Matrixspaltenberechnungsblock bereitzustellen; und ein neues Element der Matrix X am Matrixspaltenberechnungsblock zu generieren, was Folgendes beinhaltet: wenigstens einen Wert einer Matrix X an einem X-Pufferblock im Matrixspaltenberechnungsblock abzurufen; mehrere partielle Skalarprodukte an einem In-Spalten-Parallelberechnungsblock im Matrixspaltenberechnungsblock zu generieren, wobei die mehreren partiellen Skalarprodukte auf Basis des Abschnitts der Matrix A und des wenigstens einen Werts der Matrix X bestimmt werden; und das neue Element der Matrix X an einem Seriellberechnungsblock im Matrixspaltenberechnungsblock zu generieren, wobei das neue Element der Matrix X auf Basis der mehreren partiellen Skalarprodukte bestimmt wird.
  14. HWA-Matrix-Solve-Verfahren nach Anspruch 13, das des Weiteren Folgendes beinhaltet: ein Matrix-B-Element an einem Matrix-B-Block im Matrixspaltenberechnungsblock abzurufen; das Matrix-B-Element vom Abruf-B-Block zum Parallelberechnungsblock zu senden; ein negiertes Matrix-B-Element an einem Negationsblock im Parallelberechnungsblock zu generieren; und einen Matrix-Solve-Differenzwert am Seriellberechnungsblock zu generieren, wobei der Matrix-Solve-Differenzwert auf einer Summe des negierten Matrix-B-Elements und der mehreren partiellen Skalarprodukte basiert.
  15. HWA-Matrix-Solve-Verfahren nach Anspruch 14, das des Weiteren beinhaltet, eine Matrix-A-Inverse aus dem Parallelberechnungsblock am Seriellberechnungsblock zu empfangen, wobei Generieren des neuen Elements der Matrix X beinhaltet, den Matrix-Solve-Differenzwert mit der Matrix-A-Inversen an einem Matrixmultipliziererblock im Seriellberechnungsblock zu multiplizieren.
  16. HWA-Matrix-Solve-Verfahren nach Anspruch 15, wobei Empfangen einer Matrix-A-Inversen aus dem Parallelberechnungsblock am Seriellberechnungsblock Folgendes beinhaltet: die Matrix-A-Inverse am Abruf-A-Block abzufragen; und die Matrix-A-Inverse aus dem Abruf-A-Block über den Parallelberechnungsblock zum Seriellberechnungsblock zu senden.
  17. HWA-Matrix-Solve-Verfahren nach Anspruch 15, wobei Empfangen einer Matrix-A-Inversen aus dem Parallelberechnungsblock am Seriellberechnungsblock Folgendes beinhaltet: eine nicht invertierte Matrix A am Abruf-A-Block abzufragen; die Matrix-A-Inverse auf Basis der nicht invertierten Matrix A an einem Matrixinversenblock im Parallelberechnungsblock zu generieren; und die Matrix-A-Inverse aus dem Matrixinversenblock zum Seriellberechnungsblock zu senden.
  18. HWA-Matrix-Solve-Verfahren nach Anspruch 13, das des Weiteren Folgendes beinhaltet: eine Speicheradressanforderung für den Abschnitt der Matrix A aus einem Abruf-A-Speicheradressregister im Abruf-A-Block zu senden; und den Abschnitt der Matrix A an einem Abruf-A-Speicherdatenregister-FIFO-Puffer im Abruf-A-Block zu speichern und bereitzustellen.
  19. HWA-Matrix-Solve-Verfahren nach Anspruch 14, das des Weiteren Folgendes beinhaltet: eine Speicheradressanforderung für den Abschnitt der Matrix B aus einem Abruf-B-Speicheradressregister im Abruf-B-Block zu senden; und den Abschnitt der Matrix B an einem Abruf-B-Speicherdatenregister-FIFO-Puffer im Abruf-B-Block zu speichern und bereitzustellen.
  20. HWA-Matrix-Solve-Verfahren nach Anspruch 13, wobei Bestimmen des Wertes der Matrix X beinhaltet, wenigstens einen der folgenden Werte zu bestimmen, einen Vorwärtssubstitutionswert oder einen Rückwärtssubstitutionswert.
  21. HWA-Matrix-Solve-Verfahren nach Anspruch 20, wobei der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = 0 p 1 A p i X i q A p p .
    Figure DE102018124919A1_0018
  22. HWA-Matrix-Solve-Verfahren nach Anspruch 20, wobei der Vorwärtssubstitutionswert bestimmt wird entsprechend: X p q = B p q i = p + 1 M 1 A p i X i q A p p .
    Figure DE102018124919A1_0019
  23. HWA-Matrix-Solve-Verfahren nach Anspruch 13, wobei der Matrixspaltenberechnungsblock mehrere Spaltenberechnungsblöcke enthält, wobei jeder der mehreren Spaltenberechnungsblöcke einen Matrixspaltenberechnungsblock enthält.
  24. Wenigstens ein maschinenlesbares Medium, das Befehle enthält, die, wenn sie von einem Rechnersystem ausgeführt werden, bewirken, dass das Rechnersystem irgendeines der Verfahren der Ansprüche 13-23 durchführt.
  25. Vorrichtung, die Mittel umfasst, um irgendeines der Verfahren nach den Ansprüchen 13-23 durchzuführen.
DE102018124919.5A 2017-11-21 2018-10-09 Skalierbare speicheroptimierte Hardware für Matrix-Solve Pending DE102018124919A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/819,545 2017-11-21
US15/819,545 US10324689B2 (en) 2017-11-21 2017-11-21 Scalable memory-optimized hardware for matrix-solve

Publications (1)

Publication Number Publication Date
DE102018124919A1 true DE102018124919A1 (de) 2019-05-23

Family

ID=65231053

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018124919.5A Pending DE102018124919A1 (de) 2017-11-21 2018-10-09 Skalierbare speicheroptimierte Hardware für Matrix-Solve

Country Status (2)

Country Link
US (1) US10324689B2 (de)
DE (1) DE102018124919A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
US10338919B2 (en) 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
US10540420B2 (en) * 2017-12-29 2020-01-21 Intel Corporation Accelerator for matrix decomposition
US11379398B2 (en) * 2019-06-04 2022-07-05 Microchip Technology Incorporated Virtual ports for connecting core independent peripherals
US11409838B2 (en) * 2019-10-29 2022-08-09 Meta Platforms, Inc. High throughput matrix processor with support for concurrently processing multiple matrices
TWI742802B (zh) * 2020-08-18 2021-10-11 創鑫智慧股份有限公司 矩陣運算裝置及其操作方法
JP2022049552A (ja) * 2020-09-16 2022-03-29 キオクシア株式会社 半導体装置および方法
KR20220061769A (ko) 2020-11-06 2022-05-13 삼성전자주식회사 Slam을 가속화하는 방법 및 이를 이용한 장치
US11556337B2 (en) 2021-04-12 2023-01-17 Analog Devices International Unlimited Company Parallel matrix multiplication technique optimized for memory fetches

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8165214B2 (en) * 2007-05-08 2012-04-24 Freescale Semiconductor, Inc. Circuit and method for generating fixed point vector dot product and matrix vector values
US8626815B1 (en) * 2008-07-14 2014-01-07 Altera Corporation Configuring a programmable integrated circuit device to perform matrix multiplication
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US20180189675A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering

Also Published As

Publication number Publication date
US20190042195A1 (en) 2019-02-07
US10324689B2 (en) 2019-06-18

Similar Documents

Publication Publication Date Title
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE202019005682U1 (de) Hardwaregestützte Paging-Mechanismen
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
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
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: INTEL CORPORATION, SANTA CLARA, US

Free format text: FORMER OWNER: INTEL IP CORPORATION, SANTA CLARA, CALIF., US

R082 Change of representative

Representative=s name: SAMSON & PARTNER PATENTANWAELTE MBB, DE