DE10393918T5 - Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern - Google Patents

Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern Download PDF

Info

Publication number
DE10393918T5
DE10393918T5 DE10393918T DE10393918T DE10393918T5 DE 10393918 T5 DE10393918 T5 DE 10393918T5 DE 10393918 T DE10393918 T DE 10393918T DE 10393918 T DE10393918 T DE 10393918T DE 10393918 T5 DE10393918 T5 DE 10393918T5
Authority
DE
Germany
Prior art keywords
matrix
column
diagonal
columns
multiplier
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.)
Ceased
Application number
DE10393918T
Other languages
English (en)
Inventor
William Jr. Palo Alto Macy
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE10393918T5 publication Critical patent/DE10393918T5/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

Abstract

Matrixmultiplikationsverfahren mit den folgenden Schritten:
Laden jeder Diagonalen der Multiplikandenmatrix c in prozessorzugänglichen Speicher,
Laden einer Multiplikatormatrix a in prozessorzugänglichen Speicher in Spaltenreihenfolge,
Verschieben von Elementen in jeder Spalte der Multiplikatormatrix a in dem Register durch Verschieben eines Elements, wobei das letzte Element einer Spalte zu dem Spaltenanfang geschoben wird, und
Multiplizieren von Diagonalen der Multiplikandenmatrix c mit Spalten der Multiplikatormatrix a, wobei ihr Produkt zu der Summe von Produkten für Spalten einer Ergebnismatrix addiert wird.

Description

  • Technisches Gebiet
  • Die vorliegende Erfindung betrifft die Matrixarithmetik. Insbesondere gibt die vorliegende Erfindung Beispiele für eine effiziente Multiplikation von Matrizen durch Verwendung von SIMD-Registern.
  • Allgemeiner Stand der Technik
  • Die arithmetische Manipulation herkömmlicher m × n-Matrizen ist eine häufig auftretende Datenverarbeitungsaufgabe. Eine m × n-Matrix besteht aus m Zeilen und n Spalten. Die Dimensionen der Multiplikandenmatrix c sind n × m und der Multiplikatormatrix a m × p. Die resultierenden Dimensionen von b sind n × p. Werte in b werden aus der Summe von Produkten von Werten in den Zeilen in c mit Werten in Spalten von a unter Verwendung der Beziehung
    Figure 00010001
    berechnet, wobei sich der erste Index auf die Zeile und der zweite auf die Spalte bezieht. Deshalb wird der Wert eines Elements in b in der Zeile i und der Spalte j aus dem Skalarprodukt der Zeile i von c und der Spalte j von a berechnet. Die Gesamtzahl von Produkten m∙n∙p* und die Gesamtzahl von Additionen beträgt (m-1)∙n∙p.
  • Für optimale Ergebnisse wurden Matrixmultiplikationsimplementierungen verwendet, um die Schritte der Multiplikationen, Additionen und Datenordnung mit der kleinstmöglichen Anzahl von Anweisungen auszuführen. Da c eine Matrix von Koeffizienten und a eine Matrix von Daten ist, wurden verschiedene Techniken entwickelt, die die Möglichkeit ausnutzen, Elemente von c auf eine Weise, die für eine effiziente Implementierung der Matrixmultiplikation geeignet ist, im voraus zu speichern. Diese Flexibilität beim Speichern von Elementen ist bei Daten in der Matrix a jedoch nicht verfügbar. Daten in a werden im allgemeinen in einer logischen Reihenfolge gespeichert, die keine Rücksicht auf einen etwaigen Datenverarbeitungsalgorithmus nimmt.
  • Matrixmultiplikation wird bei Anwendungen wie zum Beispiel Koordinaten- und Farbtransformationen, Abbildungsalgorithmen und zahlreichen wissenschaftlichen Berechnungsaufgaben verwendet. Die Matrixmultiplikation ist eine rechnerisch intensive Operation, die mit Hilfe von SIMD-Registern (Single Instruction, Multiple Data) von Mikroprozessoren durchgeführt werden kann, die herkömmliche SIMD-Matrixmultiplikationsvorgänge unterstützen, indem SIMD-Anweisungen zum Anordnen von Daten und zur Ausführung der Matrixmultiplikation verwendet werden, wobei die durch die folgende Matrixmultiplikationsgleichung angegebene Reihenfolge von Berechnungen befolgt wird:
    Figure 00020001
    wobei b(x)=c(x)∙a(x)folgendem entspricht:
    Figure 00020002
  • Elemente der Ergebnismatrix b werden aus dem inneren Produkt (Skalarprodukt) von Zeilen der Multiplikandenmatrix c mit Spalten der Multiplikatormatrix a berechnet. Das erste Element von b lautet: b00=(c00∙a00)+(c01∙a01)+(c02∙a20)+(c03∙a30)wobei es sich um das Produkt und die Summe der ersten Zeile von c und der ersten Spalte von a handelt.
  • Als nächstes ist b01=(c00∙a01)+(c01∙a11)+(c02∙a21)+(c03∙a31)das Produkt und die Summe wieder der ersten Zeile von c und der zweiten Spalte von a. Die Berechnung wird fortgesetzt, bis die Ergebnisse für die erste Zeile vollständig sind. Die nächste Zeile von b wird unter Verwendung der nächsten Zeile von c berechnet, beginnend mit: b10=(c10∙a00)+(c11∙a01)+(c12∙a20)+(c13∙a30)
  • Mit geeigneten Änderungen (XOR anstelle von Addition) wird dasselbe Muster für die modulare Multiplikation und die herkömmliche Multiplikation verwendet.
  • Die herkömmliche Implementierung der Matrixmultiplikation unter Verwendung von SIMD-Anweisungen speichert Elemente der Multiplikatormatrix a in SIMD-Register(n) in der Reihenfolge, in der sie im Speicher gespeichert sind, und speichert Elemente der Multiplikandenmatrix c in SIMD-Registern in der Zeilenreihenfolge, wobei die Zeilen mit der Anzahl von Spalten in c wiederholt wird. Elemente von a werden in der Reihenfolge, in der sie im Speicher gespeichert sind, in dem Register gespeichert. Zum Beispiel werden in einer Matrix mit 4 Spalten Elemente der ersten Zeile in c viermal wiederholt, weil 4 Spalten von c vorliegen. Wäre die Größe von c kleiner als das SIMD-Register, könnten auch Elemente anderer Zeilen von c in dem SIMD-Register gespeichert werden. Wäre die Größe von c größer als die SIMD-Register, wären zusätzliche Register zum Speichern von Daten aus der Zeile erforderlich.
  • Die Matrixmultiplikation von Ergebnissen unter Verwendung der in SIMD-Registern gespeicherten Daten beginnt mit dem Multiplizieren von Elementen in c mit Elementen in a – c00∙a00, c01∙a10, ... c03∙a33. Als nächstes müssen Summen dieser Produkte für jede Zeile, die nebeneinander in demselben Register angeordnet sind, berechnet werden. Wenn eine Multiplizier-Akkumulier-(MAC-)Anweisung verwendet wird, werden einige dieser Summen von Produkten bei der Berechnung der Multiplikationen berechnet. Typischerweise wird b00 berechnet, gefolgt durch die Berechnung von b01. Das Register mit Werten von c wird mit der nächsten Zeile der Matrix c geladen, um Elemente der nächsten Zeile der Matrix b zu berechnen.
  • Obwohl es genau ist, ist im Betrieb möglicherweise eine erhebliche Datenumordnung modularer Produkte erforderlich, so daß sie Elemente von b berechnen können (wobei XOR zum Beispiel eine Additionsoperation bei einer Galoisfeld-Arithmetikoperation bereitstellt). Außerdem müssen Ergebnisse zwischen Registern ausgetauscht werden, bevor sie gespeichert werden können, wenn die Ergebnisse nicht in ein Register passen. Beide Probleme führen zu einem erheblichen rechnerischen Overhead und wirken sich auf die Geschwindigkeit der Matrixmultiplikationsverarbeitung aus.
  • Kurze Beschreibung der Zeichnungen
  • Die Erfindungen werden aus der nachfolgend angegebenen ausführlichen Beschreibung und aus den beigefügten Zeichnungen von Ausführungsformen der Erfindung besser verständlich, die jedoch nicht als die Erfindungen auf die spezifisch beschriebenen Ausführungsformen einschränkend aufgefaßt werden sollen, sondern nur zur Erläuterung und für das Verständnis dienen.
  • 1 zeigt schematisch ein SIMD-Register unterstützendes Datenverarbeitungssystem;
  • 2 ist eine Prozedur zum Umordnen von Daten für eine effiziente Matrixmultiplikation;
  • 3 zeigt eine generisch modulare 4x4-Matrixmultiplikation;
  • 4 zeigt die Umordnung von Daten für die auf Registern basierende Multiplikation;
  • 5 zeigt die Register nach der Umordnung gemäß 4;
  • 6 zeigt die Matrixmultiplikation nach der Umordnung gemäß 4 und 5;
  • 7 zeigt die modulare Matrixmultiplikation, wenn die Anzahl der Elemente in einer Diagonalen der Multiplikandenmatrix c nicht gleich der Anzahl der Elemente in einer Spalte der Multiplikatormatrix ist;
  • 8 zeigt die Umordnung von Daten für auf Registern basierende Multiplikation;
  • 9 zeigt die Matrixmultiplikation nach der Umordnung gemäß 7 und 8;
  • 10 zeigt modulare Matrixmultiplikation, wenn die Diagonale der Multiplikandenmatrix c kleiner als die Multiplikatormatrix a ist, wobei eine 2x3-Spalte c und eine 3x4-Matrix verwendet wird;
  • 11 zeigt die Umordnung von Daten für die auf Registern basierende Multiplikation;
  • 12 zeigt die Matrixmultiplikation nach der Umordnung gemäß 10 und 11;
  • 13 zeigt die modulare Matrixmultiplikation mit regulären Matrizen;
  • 14 zeigt die Umordnung von Daten für die auf Registern basierende Multiplikation; und
  • 15 zeigt die Matrixmultiplikation nach der Umordnung gemäß 13 und 14.
  • Ausführliche Beschreibung
  • 1 zeigt allgemein ein Datenverarbeitungssystem 10 mit einem Prozessor 12 und einem Speichersystem 13 (bei dem es sich um beliebigen zugänglichen Speicher handeln kann, darunter externer Cache-Speicher, externer RAM und/oder Speicher, der teilweise intern in dem Prozessor ist) zur Ausführung von Anweisungen, die extern in Software als Computerprogrammprodukt bereitgestellt und in der Datenspeichereinheit 18 gespeichert werden können.
  • Der Prozessor 12 des Datenverarbeitungssystems 10 unterstützt außerdem interne Speicherregister 14, einschließlich SIMD-Register 16 (Single Instruction, Multiple Data). Die Bedeutung der Register 14 ist nicht auf eine bestimmte Art von Speicherschaltung beschränkt. Stattdessen erfordert ein Register einer Ausführungsform die Fähigkeit zum Speichern und Bereitstellen von Daten und zum Durchführen der hier beschriebenen Funktionen. Bei einer Ausführungsform enthält das Register 14 Multimedia-Register, wie zum Beispiel SIMD-Register 16, zum Speichern von Multimedia-Informationen. Bei einer Ausführungsform speichern Multimedia-Register jeweils bis zu einhundertachtundzwanzig Bit gepackter Daten. Multimedia-Register können eigene Multimedia-Register sein oder Register, mit denen Multimedia-Informationen und andere Informationen gespeichert werden. Bei einer Ausführungsform speichern Multimedia-Register Multimedia-Daten bei der Durchführung von Multimedia-Operationen und speichern Gleitkomma-Daten bei der Durchführung von Gleitkomma-Operationen.
  • Das Computersystem 10 der vorliegenden Erfindung kann eine oder mehrere E/A-(Eingabe/Ausgabe-)Einrichtungen 15 enthalten, darunter eine Anzeigeeinrichtung wie zum Beispiel ein Monitor. Die E/A-Einrichtungen können außerdem eine Eingabeeinrichtung wie zum Beispiel eine Tastatur, und eine Cursorsteuerung wie zum Beispiel eine Maus, einen Trackball oder ein Trackpad enthalten. Zusätzlich können die E/A-Einrichtungen auch einen Netzwerkverbinder enthalten, so daß das Computersystem 10 Teil eines lokalen Netzwerks (LAN) oder eines großflächigen Netzwerks (WAN) ist, die E/A-Einrichtungen 15, eine Einrichtung zur Tonaufzeichnung und/oder -wiedergabe, wie zum Beispiel einen Audiodigitalisierer, der an ein Mikrofon angekoppelt ist, um Spracheingabe für die Spracherkennung aufzuzeichnen. Die E/A-Einrichtungen 15 können außerdem eine Videodigitalisie rungseinrichtung enthalten, mit der Videobilder erfaßt werden können, eine Druckausgabeeinrichtung, wie zum Beispiel einen Drucker, und eine CD-ROM-Einrichtung.
  • Bei einer Ausführungsform kann ein von der Datenspeichereinheit 18 lesbares Computerprogrammprodukt ein maschinen- oder computerlesbares Medium enthalten, auf dem Anweisungen gespeichert sind, mit denen ein Computer (oder andere elektronische Einrichtungen) programmiert werden kann (d.h. die Funktionsweise festlegt), um einen Prozeß gemäß der vorliegenden Erfindung durchzuführen. Das computerlesbare Medium der Datenspeichereinheit 18 kann u.a. ohne Einschränkung Disketten, optische Datenträger, Kompaktdisk, Nurlesespeicher (CD-ROMs) und magnetooptische Datenträger, Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMs), löschbare programmierbare Nurlesespeicher (EPROMs), elektrisch löschbare programmierbare Nurlesespeicher (EEPROMs), magnetische oder optische Karten, Flash-Speicher oder dergleichen umfassen.
  • Folglich umfaßt das computerlesbare Medium eine beliebige Art von für das Speichern elektronischer Anweisungen geeigneten Medien bzw. ein maschinenlesbares Medium. Darüber hinaus kann die vorliegende Erfindung auch als ein Computerprogrammprodukt heruntergeladen werden. Dementsprechend kann das Programm von einem abgesetzten Computer (z.B. einem Server) zu einem anfordernden Computer (z.B. einem Client) transferiert werden. Der Transfer des Programms kann mittels Datensignalen erfolgen, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsstrecke (z.B. ein Modem, eine Netzwerkverbindung oder dergleichen) realisiert werden.
  • Das Datenverarbeitungssystem 10 kann ein Vielzweckcomputer mit einem Prozessor mit geeigneter Registerstruktur sein oder kann für Spezial- oder eingebettete Anwendungen konfiguriert werden. Bei einer Ausführungsform werden die Verfahren der vorliegenden Erfindung in maschinenausführbaren Anweisungen realisiert, die für die Steuerung der Funktionsweise des Computersystems und insbesondere der Funktionsweise des Prozessors und der Register ausgelegt sind. Mit den Anweisungen kann man bewirken, daß ein Vielzweck- oder Spezialprozessor, der mit den Anweisungen programmiert wird, die Schritte der vorliegenden Erfindung ausführt. Alternativ dazu könnten die Schritte der vorliegenden Erfindung auch durch spezifische Hardwarekomponenten durchgeführt werden, die festverdrahtete Logik zur Durchführung der Schritte enthalten, oder durch eine beliebige Kombination von programmierten Computerkomponenten und angepaßten Hardwarekomponenten.
  • Es versteht sich, daß Fachleute verschiedene Begriffe und Techniken zur Beschreibung der Kommunikation, Protokolle, Anwendungen, Implementierungen, Mechanismen usw. benutzen. Eine solche Technik ist die Beschreibung einer Implementierung einer Technik über einen Algorithmus oder einen mathematischen Ausdruck. Das heißt, obwohl die Technik zum Beispiel als Ausführung vom Code auf einem Computer implementiert werden kann, kann der Ausdruck dieser Technik also geeigneter und kürzer als Formel, Algorithmus oder mathematischer Ausdruck übermittelt und kommuniziert werden.
  • Fachleute würden also eine Blockbezeichnung A+B=C als eine additive Funktion erkennen, deren Implementierung in Hardware und/oder Software zwei Eingaben (A und B) annehmen und eine Summierungsausgabe (C) erzeugen würde. Die Verwendung von Formeln, Algorithmen oder mathematischen Ausdrücken als Beschreibungen ist also so zu verstehen, daß sie eine physische Ausführungsform mindestens in Hardware und/oder Software besitzt (wie zum Beispiel als ein Computersystem, in dem die Techniken der vorliegenden Erfindung ausgeübt werden können, sowie als Implementierung als eine Ausführungsform).
  • 2 zeigt eine Ausführungsform einer Prozedur zur Multiplikation einer Matrix, wie zum Beispiel in 3 dargestellt, gemäß der vorliegenden Erfindung. Wie aus 2 zu sehen ist, werden Daten zuerst durch Umordnen und Laden in Speicher zur effizienten Matrixmultiplikation organisiert (in diesem Beispiel sind die Register als Box 21 bezeichnet). Jede Diagonale der Multiplikandenmatrix c wird in ein verschiedenes Register geladen. Die Diagonalen mit einem Element in der äußersten rechten Spalte, das sich nicht in der unteren Zeile befindet, wird durch Verwendung einer Kopie der Matrix, die neben der rechten Spalte positioniert wird, in das Element in der nächsten Zeile verlängert. Das nächste Element einer Diagonale befindet sich in der nächsten Zeile. Die Diagonalen werden in Register(n) so oft dupliziert, wie die Anzahl der Spalten in der Multiplikatormatrix a. Die Anzahl der Elemente in einer Diagonale ist gleich der Anzahl der Spalten in c. Daten der Multiplikatormatrix a werden in Spaltenreihenfolge, der Reihenfolge, in der Daten im Speicher gespeichert sind, in Register geladen. Zwischen jeder Multiplikation und Addition werden Elemente in jeder Spalte von a in dem Register um ein Element verschoben (Box 22). Das letzte Element einer Spalte wird an die vordere Position der Spalte geschoben oder rotiert. Diagonalen der Multiplikandenmatrix c werden mit Spalten der Multiplikatormatrix a (deren Länge möglicherweise eingestellt wird) multipliziert (Box 23) und ihr Produkt wird zu der Summe der Produkte für die Spalten der Ergebnismatrix b addiert (Box 24).
  • Wenn die Anzahl der Elemente einer Spalte von a von der Anzahl einer Spalte von c verschieden ist, wird die Anzahl der Elemente aus einer Spalte von a in dem SIMD-Register gleich der Anzahl der Elemente in einer Spalte von c eingestellt. Eine Möglichkeit, zu bestimmen, welche Elemente der Multiplikatormatrix a auszuwählen sind, besteht darin, zuerst Kopien der Multiplikatormatrix a übereinander zu stapeln, so daß Spalten ausgerichtet sind und so daß die obere Zeile einer Kopie sich unter der unteren Zeile und einer weiteren Kopie befindet. Dadurch wird jede Spalte effektiv verlängert. Da die Anzahl der einer verlängerten Spalte entnommenen Elemente gleich der Anzahl der Elemente in einer Diagonalen der Multiplikandenmatrix c ist. Nach jeder Multiplizier- und Addieroperation werden Elemente für die nächste Multiplizier- und Addieroperation ausgewählt, indem die verlängerte Spalte um ein Element nach unten verschoben wird. Wenn die Länge einer Multiplikandendiagonale größer als eine Multiplikatorspalte ist, werden gleiche Werte aus einer Spalte ausgewählt, und wenn die Länge einer Multiplikandendiagonale kleiner als eine Multiplikatorspalte ist, werden nicht alle Werte aus einer Spalte ausgewählt.
  • Obwohl das obige Beispiel interne Prozessorregister verwendet, versteht sich, daß es nicht immer notwendig ist, ein internes Prozessorregister zu laden, um die SIMD-Operation auszuführen. Für Multiplikation oder anderes verwendete Ope randen können im Speicher gespeichert werden, statt erst in ein Register geladen zu werden. Bestimmte Architekturen, wie zum Beispiel RISC-Architekturen, laden zuerst Register, aber die Intel-Architektur kann im Speicher vorliegende Operanden aufweisen. Ein Vergleich der Verwendung von Register- und Speicheroperanden lautet
    pmaddwd xmm0, xmm1
    und
    pmaddwd xmm0, [eax]
  • Diese produzieren dasselbe Ergebnis in xmm0, wenn die in Adresse, die in dem Register eax vorliegt, gespeicherten Daten dieselben wie Daten in xmm1 sind. Es ist wünschenswert, den Speicheroperanden zu verwenden, wenn dem Code die Register ausgehen und der Speicherzugriff schnell ist.
  • 3 zeigt die modulare Multiplikation 30 gemäß der allgemein in bezug auf 2 besprochenen Prozedur. In diesem Beispiel ist die modulare Multiplikation eine Arithmetik im Galoisfeld, wobei XOR zum Addieren von Werten ohne Überträge verwendet wird (z.B. binäre Addition ohne Überträge, so daß folgendes gilt: 1 + 1 = 0, 0 + 0 = 0, 0 + 1 = 1 und 1 + 0 = 1, und wobei die Ergebnisse gewöhnlich mit einem XOR berechnet werden). Wie in 3 zu sehen ist, wird die Multiplikation 30 regulärer quadratischer Matrizen b(x) = c(x) ⊗ a(x) bestimmt. 4 zeigt die Bestimmung eines Registerdatenlademusters 40 für die Multiplikation der Matrizen von 3. Wie in einem Registeranordnungsdiagramm 40 von 4 zu sehen ist, sind Daten in Registern für den nächsten Schritt fettgedruckt. Durchgezogene Linien zeigen Grenzen an, an denen die Matrix dupliziert wird. In einem ersten Schritt werden Spalten von a mit einer Diagonale von c multipliziert. Im zweiten Schritt werden Spalten von a verschoben und mit der nächsten Diagonale von c multipliziert, wie durch die Pfeile angegeben.
  • 5 zeigt die Reihenfolge 50 der Daten in Registern, die sich aus den in 4 angegebenen Verschiebungen ergibt. Wie mit Bezug auf den Zeitschritt (A) in 5 zu sehen ist, halten die Register die Hauptdiagonale von c, und Daten der a-Matrix in der Reihenfolge, in der sie im Speicher gespeichert sind. Im Zeitschritt (B) von 5 halten die Register die Diagonale und Spalten des verschobenen a. Das Verschieben von Spalten wird durch Rotieren von Elementen mit einer Byte-Shuffle-Operation implementiert. Man beachte, daß Spalten in a aufwärts verschoben werden können und die Auswahl von Diagonalen in c nach links anstelle von rechts ausgewählt werden kann.
  • 6 zeigt die Operationen 60 zum Multiplizieren der 4x4 Matrizen a und c weiter. Daten für jeden Zeitschritt werden wie oben in bezug auf 4 und 5 beschrieben angeordnet. In jedem Zeitschritt C, D, E und F wird das modulare Produkt von a und c berechnet. Produkte werden mit XOR zu Produkten anderer Schritte addiert.
  • Der folgende Pseudocodeausschnitt gibt eine Implementierungsbeispiel der c Matrixmultiplikation:
    Figure 00110001
    Figure 00120001
  • Die Anweisungen 9 bis 12 repräsentieren die grundlegenden Operationen dieses Verfahrens. Spalten der Multiplikatormatrix a werden in der Anweisung 9 rotiert. Das Ergebnis wird in Anweisung 10 kopiert, weil es durch die Multiplikation in der Anweisung 11 überschrieben wird, und das Produkt wird in der Anweisung 12 zu der Summe von Produkten addiert.
  • Auch nichtreguläre Matrizen können einer Ausführungsform der Prozedur der Erfindung unterzogen werden. Man betrachte zum Beispiel die Matrixmultiplikation 70 von 7, wobei die Anzahl der Elemente in einer Diagonale der Multiplikandenmatrix c nicht gleich der Anzahl der Elemente in einer Spalte der Multiplikatormatrix a ist und die Diagonale der Multiplikandenmatrix c größer als die Spalte der Multiplikatormatrix a ist. In diesem Beispiel modulare Multiplikation einer 3x2-Matrix c mit einer 2x4-Matrix a. Das Verfahren zum Auswählen und Anordnen von Daten in SIMD-Registern für dieses Beispiel ist in 8 beschrieben. Die erste Diagonale von c lautet c00, c11, c20. Diese Diagonale wird mit den ersten 3 Werten verlängerter Spalten von a multipliziert. Da die Spaltenlänge von a nur 2 beträgt, werden a-Matrizen in einer Reihenfolge 80, wie in 8 gezeigt, übereinander gestapelt, um die Länge der Spalten effektiv zu verlängern. Anders betrachtet, klappt oder rotiert sie auf den ersten Wert zurück, wenn das Ende einer Spalte erreicht wird. 9 zeigt die Datenanordnung 90 von Werten für die erste Diagona le von c und die verlängerten Spalten von a. Man beachte, daß die ersten drei Werte von a auf der rechten Seite a00, a10, a00 sind, so daß a00 wiederholt wird. Die nächste Diagonale von c lautet c01, c10, c21 und die nächste Spalte lautet a10, a00, a10, ausgewählt durch Verschieben eines Elements in jeder verlängerten Spalte, wie in 8 gezeigt nach unten. 9 zeigt Operationen zum Multiplizieren der Matrizen a und c weiter. Die Datenreihenfolge 90 für jeden Zeitschritt ist wie oben in Beziehung auf 7 und 8 beschrieben. In jedem Zeitschritt wird das modulare Produkt von a und c berechnet. Produkte werden mit XOR zu Produkten anderer Schritte addiert.
  • 10 zeigt die modulare Multiplikation 100, wobei die Diagonale der Multiplikandenmatrix c kleiner als die Multiplikatormatrix a ist, wobei eine 2x3-Spalte c und eine 3x4-Matrix a verwendet wird. Wie in 11 gezeigt, setzt die Reihenfolgeauswahl 110 die erste Diagonale von c als c00 und c11. Diese Diagonale wird mit den ersten zwei Werten der verlängerten Spalten von a, a00 und a10, multipliziert. Die Spaltenlänge von a ist die Länge 3, es werden aber nur zwei Werte der Spalte a ausgewählt. 12 zeigt die Datenanordnung 120 von Werten in Registern. Es gibt drei Paare von Registern mit Werten aus den Matrizen a und c, die miteinander multipliziert werden, weil die Matrix c 3 Diagonalen aufweist. Nur die ersten zwei Werte von a der ersten Spalte a00 und a10 werden in dem ersten Register gespeichert. In dem nächsten Paar von Registern lautet die Diagonale von c c01 und c12 und die nächsten Werte aus a werden durch Herunterschieben ausgewählt. Zum Beispiel lauten Werte aus der ersten Spalte a10 und a20. Das dritte Paar von Registern hält die dritte Diagonale und die nächsten Werte, die Spalten von a herunterschieben. In diesem Fall lauten Werte aus der ersten Spalte a20 und a00.
  • Es versteht sich, daß die obige Beschreibung von 3-12 arithmetische Operationen beschreibt, die keine Anweisung zum Multiplizieren/Akkumulieren (MAC) erfordern. Stattdessen wird Galoisfeldarithmetik unter Verwendung der modularen Multiplikation und XOR für Addition beschrieben. Wenn die Summe von Produkten von Elementen einer Zeile des Multiplikanden und einer Spalte des Multiplikators durch denselben Datentyp wie die ursprünglichen Matrixelemente repräsentiert wird, dann ist der einzige Unterschied zwischen herkömmlicher Arithmetik und Galoisfeldarithmetik das verwendete Verfahren für Addition und Multiplikation. Alle Muster bleiben gleich. Wenn der vom Ergebnis erforderte Datentyp eine größere Größe als der der Originaldaten aufweist, dann wird der Datentyp der Matrixelemente vor der Matrixmultiplikation vergrößert (im allgemeinen Verdopplung der Größe). In diesem Fall werden die konstanten Multiplikandenmatrixdaten als der größere Datentyp gespeichert. Zum Beispiel werden Koeffizienten mit Byte-Größe als 16-Bit-Integer gespeichert. Der Datentyp der Multiplikatormatrix wird vor den in 3-12 gezeigten Berechnungen verändert. Die SIMD-Unpack-Operation dient im allgemeinen zum Ändern des Datentyps. Dadurch wird dann die Anzahl der erforderlichen Register zunehmen, aber ansonsten sind die in 3-12 beschriebenen Operationen in bezug auf Galoisfeld- oder herkömmlicher Arithmetik invariant.
  • Wenn eine MAC-Anweisung verfügbar ist, kann die Matrixmultiplikation wie mit Bezug auf die folgenden 13-15 voranschreiten. Während eine MAC-Anweisung für jede beliebige Form von Arithmetik (einschließlich Galoisfeldarithmetik) benutzt werden kann, berechnet im Fall herkömmlicher Fixpunktarithmetik eine MAC zwei Produkte, addiert diese Produkte und schreibt das Ergebnis allgemein als einen Datentyp der zweimal so groß wie der ursprüngliche Multiplikand und Multiplikator ist (Byte zu 16-Bit-Wort und 16-Bit-Wort zu Doppel-32-Bit-Wort sind typisch). Im Fall einer Galoisfeldarithmetik berechnet eine MAC zwei Produkte durch modulare Multiplikation, addiert die Produkte mit einer XOR-Operation und schreibt ein Ergebnis, das denselben Datentyp aufweist. Die Anzahl zur Repräsentation einer Summe oder eines Produkts in Galoisfeldarithmetik erforderlicher Bit ist dieselbe wie die Anzahl der erforderlichen Bit zur Repräsentation der ursprünglichen Daten. MACs für herkömmliche Arithmetik finden sich in fast allen SIMD-Anweisungssätzen (d.h. madd in dem Anweisungssatz der Intel-Architektur). Entsprechend zeigt 13 die Multiplikation 130 mit regulären Matrizen und die Verwendung einer geeigneten MAC-Anweisung. Wie in 14 zu sehen ist, gibt die Anordnung 140 Daten in Registern für den nachfolgenden Schritt fettgedruckt an. Durchgezogene Linien zeigen Grenzen an, an denen die Matrix dupliziert wird. Man beachte, daß für reguläre Matrixmultiplikation Elemente zwei Werte und jede Verschiebung zwei Werte betragen. Im Fall regulärer Multiplikation liegen zweimal soviel Werte in einer c-Matrixdiagonalen wie in einer a-Matrixspalte vor, wie in 14 gezeigt (in diesem Beispiel werden 8 Werte geordnet). Jede a-Matrixspalte wird wie in der Registeranordnung 150 von 15 a und b gezeigt dupliziert. Folglich werden die ersten beiden Spalten der a-Matrix in einem Register und die zweiten beiden in einem anderen gehalten. Der Ansatz für die Anordnung von Daten für eine reguläre Matrixmultiplikation ist derselbe wie der für modulare Multiplikation, mit der Ausnahme, daß im regulären Fall Elemente zwei Werte betragen, die Verschiebung der Datenreihenfolge des nächsten Schritts zwei Werte beträgt und Multiplikatorspalten dupliziert werden. Auf angrenzende Werte in a und c wird eine Multiplizier-Addier-Operation angewandt. Diese Operation multipliziert Werte in a und c und addiert angrenzende Produkte. Die Multiplizier-Addier-Ergebnisse werden in Plätzen gespeichert, die zweimal so groß wie die anfänglichen Daten sind. Zum Beispiel berechnet im Schritt (1) die madd-Operation das Produkt von a00 und c00 und das Produkt von a10 und c01 und addiert die beiden Produkte. Ähnlich berechnet im Schritt (2) die madd-Operation das Produkt von a20 und c02 und das Produkt a30 und c03 und addiert die beiden Produkte. Ergebnisse der madd-Operationen werden addiert, um das Ergebnis für die Matrixmultiplikation (b00) zu erhalten.
  • Es folgt ein Pseudocode für reguläre Matrixmultiplikation unter Verwendung von 16-Bit-Wörtern und 128-Bit-Registern:
    Figure 00150001
    Figure 00160001
  • Jedes Ergebnis wird durch zwei Multiplizier-Addier-Operationen, ein Shuffle und eine Addition der Multiplizier-Addier-Ergebnisse produziert. Ergebnisse sind 16 Bit, so daß 16 Ergebnisse zwei 128-Bit-Register erfordern.
  • Obwohl die vorliegende Erfindung besonders nützlich für die Multiplikation von Matrizen von Byte-Daten ist, die mit SIMD-Anweisungen implementiert werden, ist die Erfindung nicht auf solche Multiplikationen beschränkt. Es können größere Datentypen verwendet werden, wobei nur eine Reduktion der Anzahl von Elementen erforderlich ist, die in einem Register gespeichert werden können, und größere Matrizen, die mehr Elemente, die gespeichert werden müssen, aufweisen. Wenn Diagonalen der Multiplikandenmatrix c oder die Spalten der Multiplikatormatrix a nicht in ein SIMD-Register passen, können sie in zusätzliche Register verlängert werden. In bestimmten Fällen kann für die Benutzung größerer Register die Rotation von Daten in einer Spalte einen Austausch von Elementen zwischen Registern erfordern.
  • Es versteht sich, daß Erwähnung von "Ausführungsform", "eine Ausführungsform", "bestimmte Ausführungsformen" oder "andere Ausführungsformen" in der vorliegenden Beschreibung bedeutet, daß ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, das bzw. die in Verbindung mit den Ausführungsformen beschrieben wird, mindestens in bestimmten Ausführungs formen enthalten ist, aber nicht unbedingt in allen Ausführungsformen der Erfindung. Die verschiedenen Erwähnungen "Ausführungsform", "eine Ausführungsform" oder "bestimmte Ausführungsformen" sollen sich nicht unbedingt alle auf dieselben Ausführungsformen beziehen.
  • Wenn die Beschreibung erwähnt, daß eine Komponente, ein Merkmal, eine Struktur oder eine Eigenschaft "eventuell", "möglicherweise" oder "gegebenenfalls" enthalten sein kann, muß diese bestimmte Komponente, dieses bestimmte Merkmal, diese bestimmte Struktur oder diese bestimmte Eigenschaft nicht enthalten sein. Wenn die Beschreibung oder ein Anspruch "ein" Element erwähnt, bedeutet dies nicht, daß nur eines von dem Element vorliegt. Wenn die Beschreibung oder Ansprüche "ein zusätzliches" Element erwähnen, schließt dies nicht aus, daß mehr als eines des zusätzlichen Elements vorliegt.
  • Für Fachleute ist an Hand der vorliegenden Offenlegung erkennbar, daß viele andere Varianten der obigen Beschreibung und Zeichnungen innerhalb des Schutzumfangs der vorliegenden Erfindung vorgenommen werden können. Es sind also die folgenden Ansprüche, einschließlich etwaiger Ergänzungen dieser, die den Schutzumfang der Erfindung definieren.
  • Zusammenfassung
  • Es wird ein Beispiel für ein Matrixmultiplikationsverfahren beschrieben, das die Berechnungszeiten auf SIMD-Prozessoren reduziert. Die Matrixmultiplikation erfordert das Laden jeder Diagonalen der Multiplikandenmatrix c in ein verschiedenes Register eines Prozessors und das Laden einer Multiplikatormatrix in mindestens ein Register in Spaltenreihenfolge. Multiplikations- und Additionselemente in jeder Spalte der Multiplikatormatrix a in dem Register werden durch Verschieben eines Elements selektiv verschoben, wobei das letzte Element einer Spalte zu dem Spaltenanfang geschoben wird. Diagonalen der Multiplikandenmatrix c werden mit spalten der Multiplikatormatrix a multipliziert, wobei ihr Produkt zu der Summe von Produkten für Spalten einer Ergebnismatrix addiert wird.

Claims (30)

  1. Matrixmultiplikationsverfahren mit den folgenden Schritten: Laden jeder Diagonalen der Multiplikandenmatrix c in prozessorzugänglichen Speicher, Laden einer Multiplikatormatrix a in prozessorzugänglichen Speicher in Spaltenreihenfolge, Verschieben von Elementen in jeder Spalte der Multiplikatormatrix a in dem Register durch Verschieben eines Elements, wobei das letzte Element einer Spalte zu dem Spaltenanfang geschoben wird, und Multiplizieren von Diagonalen der Multiplikandenmatrix c mit Spalten der Multiplikatormatrix a, wobei ihr Produkt zu der Summe von Produkten für Spalten einer Ergebnismatrix addiert wird.
  2. Verfahren nach Anspruch 1, wobei der prozessorzugängliche Speicher ein SIMD-Register ist.
  3. Verfahren nach Anspruch 2, ferner mit dem Schritt des Ladens einer Diagonalen in mehrere SIMD-Register des Prozessors.
  4. Verfahren nach Anspruch 1, wobei die Länge der Multiplikatormatrix a vor dem Multiplizieren mit Diagonalen der Multiplikandenmatrix c eingestellt wird, indem Kopien der Multiplikatormatrix a übereinander gestapelt werden, so daß die Spalten ausgerichtet sind und eine oberste Zeile einer Kopie unter einer unteren Zeile und jeder anderen Kopie liegt, um jede Spalte zu verlängern.
  5. Verfahren nach Anspruch 1, wobei die Diagonale der Multiplikandenmatrix c kürzer als die Spalte der Multiplikatormatrix a ist.
  6. Verfahren nach Anspruch 1, wobei die Diagonale der Multiplikandenmatrix c länger als die Spalte der Multiplikatormatrix a ist.
  7. Verfahren nach Anspruch 1, wobei das Verschieben der Elemente ferner ein Multiplizieren von Spalten von a mit einer Diagonale von c und ein Verschieben und Multiplizieren von Spalten von a mit einer nächsten Diagonale von c in einer vorbestimmten Reihenfolge umfaßt.
  8. Verfahren nach Anspruch 1, wobei das Verschieben der Elemente weiterhin das Rotieren von Elementen unter Verwendung einer Byte-Shuffle-Operation umfaßt.
  9. Verfahren nach Anspruch 1, wobei jedes Element ein Byte ist.
  10. Verfahren nach Anspruch 1, wobei das Multiplizieren von Diagonalen ferner das Anwenden einer MAC-Operation umfaßt.
  11. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, die, wenn sie von einer Maschine ausgeführt werden, zu folgendem führen: Laden jeder Diagonalen der Multiplikandenmatrix c in prozessorzugänglichen Speicher, Laden einer Multiplikatormatrix a in prozessorzugänglichen Speicher in Spaltenreihenfolge, Verschieben der Elemente in jeder Spalte der Multiplikatormatrix a in dem Register durch Verschieben eines Elements, wobei das letzte Element einer Spalte zu dem Spaltenanfang geschoben wird, und Multiplizieren von Diagonalen der Multiplikandenmatrix cmit Spalten der Multiplikatormatrix a, wobei ihr Produkt zu der Summe von Produkten für Spalten einer Ergebnismatrix addiert wird.
  12. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei der prozessorzugängliche Speicher ein SIMD-Register ist.
  13. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 12, ferner mit dem Schritt des Ladens einer Diagonalen in mehrere SIMD-Register des Prozessors.
  14. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei die Länge der Multiplikatormatrix a vor dem Multiplizieren mit Diagonalen der Multiplikandenmatrix c eingestellt wird, indem Kopien der Multiplikatormatrix a übereinander gestapelt werden, so daß die Spalten ausgerichtet sind und eine oberste Zeile einer Kopie unter einer unteren Zeile und jeder anderen Kopie liegt, um jede Spalte zu verlängern.
  15. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei die Diagonale der Multiplikandenmatrix c kürzer als die Spalte der Multiplikatormatrix a ist.
  16. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei die Diagonale der Multiplikandenmatrix c länger als die Spalte der Multiplikatormatrix a ist.
  17. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei das Verschieben der Multiplikations- und Additionselemente ferner ein Multiplizieren von Spalten von a mit einer Diagonale von c und ein Verschieben und Multiplizieren von Spalten von a mit einer nächsten Diagonale von c in einer vorbestimmten Reihenfolge umfaßt.
  18. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei das Verschieben der Multiplikations- und Additionselemente weiterhin das Rotieren von Elementen unter Verwendung einer Byte-Shuffle-Operation umfaßt.
  19. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei das Multiplizieren von Diagonalen ferner das Anwenden einer MAC-Operation umfaßt.
  20. Artikel mit einem Speichermedium, auf dem Anweisungen gespeichert sind, nach Anspruch 11, wobei jedes Element ein Byte ist.
  21. System, umfassend einen Prozessor mit Registern, der jede Diagonale der Multiplikandenmatrix c in prozessorzugänglichen Speicher laden, wobei eine Multiplikatormatrix a in Spaltenreihenfolge in prozessorzugänglichen Speicher geladen wird, und Steuerlogik zum Verschieben der Multiplikations- und Additionselemente in jeder Spalte der Multiplikatormatrix a in den Registern durch Verschieben eines Elements, wobei das letzte Element einer Spalte zu dem Spaltenanfang geschoben wird, und Multiplizieren von Diagonalen der Multiplikandenmatrix c mit Spalten der Multiplikatormatrix a, wobei ihr Produkt zu der Summe von Produkten für Spalten einer Ergebnismatrix addiert wird.
  22. System nach Anspruch 21, wobei der prozessorzugängliche Speicher ein SIMD-Register ist.
  23. System nach Anspruch 22, ferner umfassend das Laden einer Diagonale in mehrere SIMD-Register des Prozessors.
  24. System nach Anspruch 21, wobei die Länge der Multiplikatormatrix a vor dem Multiplizieren mit Diagonalen der Multiplikandenmatrix c eingestellt wird, indem Kopien der Multiplikatormatrix a übereinander gestapelt werden, so daß die Spalten ausgerichtet sind und eine oberste Zeile einer Kopie unter einer unteren Zeile und jeder anderen Kopie liegt, um jede Spalte zu verlängern.
  25. System nach Anspruch 21, wobei die Diagonale der Multiplikandenmatrix c kürzer als die Spalte der Multiplikatormatrix a ist.
  26. System nach Anspruch 21, wobei die Diagonale der Multiplikandenmatrix c länger als die Spalte der Multiplikatormatrix a ist.
  27. System nach Anspruch 21, wobei die Steuerlogik zum Verschieben der Multiplikations- und Additionselemente ferner ein Multiplizieren von Spalten von a mit einer Diagonale von c und ein Verschieben und Multiplizieren von Spalten von a mit einer nächsten Diagonale von c in einer vorbestimmten Reihenfolge umfaßt.
  28. System nach Anspruch 21, wobei die Steuerlogik zum Verschieben der Multiplikations- und Additionselemente weiterhin das Rotieren von Elementen unter Verwendung einer Byte-Shuffle-Operation umfaßt.
  29. System nach Anspruch 21, wobei jedes Element ein Byte ist.
  30. System nach Anspruch 21, wobei das Multiplizieren von Diagonalen ferner das Anwenden einer MAC-Operation umfaßt.
DE10393918T 2002-12-20 2003-11-21 Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern Ceased DE10393918T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/327,445 US20040122887A1 (en) 2002-12-20 2002-12-20 Efficient multiplication of small matrices using SIMD registers
US10/327,445 2002-12-20
PCT/US2003/037564 WO2004061705A2 (en) 2002-12-20 2003-11-21 Efficient multiplication of small matrices using simd registers

Publications (1)

Publication Number Publication Date
DE10393918T5 true DE10393918T5 (de) 2006-03-16

Family

ID=32594254

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10393918T Ceased DE10393918T5 (de) 2002-12-20 2003-11-21 Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern

Country Status (8)

Country Link
US (1) US20040122887A1 (de)
CN (1) CN1774709A (de)
AU (1) AU2003291170A1 (de)
DE (1) DE10393918T5 (de)
GB (1) GB2410108B (de)
HK (1) HK1074504A1 (de)
TW (1) TWI276972B (de)
WO (1) WO2004061705A2 (de)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071405A1 (en) * 2003-09-29 2005-03-31 International Business Machines Corporation Method and structure for producing high performance linear algebra routines using level 3 prefetching for kernel routines
US8966223B2 (en) * 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
EP2477109B1 (de) 2006-04-12 2016-07-13 Soft Machines, Inc. Vorrichtung und Verfahren zur Verarbeitung einer Anweisungsmatrix zur Spezifizierung von parallelen und abhängigen Betriebsabläufen
US7844352B2 (en) * 2006-10-20 2010-11-30 Lehigh University Iterative matrix processor based implementation of real-time model predictive control
EP2523101B1 (de) 2006-11-14 2014-06-04 Soft Machines, Inc. Vorrichtung und Verfahren zum Verarbeiten von komplexen Anweisungsformaten in einer Multi-Thread-Architektur, die verschiedene Kontextschaltungsmodi und Visualisierungsschemen unterstützt
WO2008126041A1 (en) * 2007-04-16 2008-10-23 Nxp B.V. Method of storing data, method of loading data and signal processor
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8250130B2 (en) * 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI533129B (zh) 2011-03-25 2016-05-11 軟體機器公司 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
EP2710481B1 (de) 2011-05-20 2021-02-17 Intel Corporation Dezentralisierte zuordnung von ressourcen und verbindungsstrukturen zur unterstützung der ausführung von anweisungssequenzen durch mehrere maschinen
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
CN102446160B (zh) * 2011-09-06 2015-02-18 中国人民解放军国防科学技术大学 面向双精度simd部件的矩阵乘实现方法
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
EP2783281B1 (de) 2011-11-22 2020-05-13 Intel Corporation Durch einen mikroprozessor beschleunigter code-optimierer
WO2013095504A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Matrix multiply accumulate instruction
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
EP2972845B1 (de) 2013-03-15 2021-07-07 Intel Corporation Verfahren zur ausführung von in blöcken gruppierten befehlen aus mehreren threads
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
US9426434B1 (en) * 2014-04-21 2016-08-23 Ambarella, Inc. Two-dimensional transformation with minimum buffering
US20170046153A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Simd multiply and horizontal reduce operations
US9870341B2 (en) * 2016-03-18 2018-01-16 Qualcomm Incorporated Memory reduction method for fixed point matrix multiply
CN109074845B (zh) 2016-03-23 2023-07-14 Gsi 科技公司 存储器内矩阵乘法及其在神经网络中的使用
CN111090467A (zh) * 2016-04-26 2020-05-01 中科寒武纪科技股份有限公司 一种用于执行矩阵乘运算的装置和方法
US20170344876A1 (en) * 2016-05-31 2017-11-30 Samsung Electronics Co., Ltd. Efficient sparse parallel winograd-based convolution scheme
US10275243B2 (en) * 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
JP6786948B2 (ja) 2016-08-12 2020-11-18 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180113840A1 (en) * 2016-10-25 2018-04-26 Wisconsin Alumni Research Foundation Matrix Processor with Localized Memory
US10528321B2 (en) * 2016-12-07 2020-01-07 Microsoft Technology Licensing, Llc Block floating point for neural network implementations
CN113961876B (zh) * 2017-01-22 2024-01-30 Gsi 科技公司 关联存储器设备中的稀疏矩阵乘法
US10817587B2 (en) * 2017-02-28 2020-10-27 Texas Instruments Incorporated Reconfigurable matrix multiplier system and method
CN109937416B (zh) * 2017-05-17 2023-04-04 谷歌有限责任公司 低时延矩阵乘法部件
GB2563878B (en) * 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
US10534838B2 (en) * 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10346163B2 (en) * 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
CN109871236A (zh) * 2017-12-01 2019-06-11 超威半导体公司 具有低功率并行矩阵乘法流水线的流处理器
US11093580B2 (en) * 2018-10-31 2021-08-17 Advanced Micro Devices, Inc. Matrix multiplier with submatrix sequencing
KR20200082617A (ko) * 2018-12-31 2020-07-08 삼성전자주식회사 메모리 장치를 이용한 계산 방법 및 이를 수행하는 메모리 장치
US10872038B1 (en) * 2019-09-30 2020-12-22 Facebook, Inc. Memory organization for matrix processing
CN110780849B (zh) * 2019-10-29 2021-11-30 中昊芯英(杭州)科技有限公司 矩阵处理方法、装置、设备及计算机可读存储介质
CN113536220A (zh) * 2020-04-21 2021-10-22 中科寒武纪科技股份有限公司 运算方法、处理器及相关产品
CN112433760B (zh) * 2020-11-27 2022-09-23 海光信息技术股份有限公司 数据排序方法和数据排序电路

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5170370A (en) * 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US6115812A (en) * 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
JP2003242133A (ja) * 2002-02-19 2003-08-29 Matsushita Electric Ind Co Ltd 行列演算装置
US20040047466A1 (en) * 2002-09-06 2004-03-11 Joel Feldman Advanced encryption standard hardware accelerator and method

Also Published As

Publication number Publication date
AU2003291170A1 (en) 2004-07-29
WO2004061705A2 (en) 2004-07-22
TW200413947A (en) 2004-08-01
WO2004061705A3 (en) 2005-08-11
US20040122887A1 (en) 2004-06-24
TWI276972B (en) 2007-03-21
GB0508682D0 (en) 2005-06-08
HK1074504A1 (en) 2005-11-11
CN1774709A (zh) 2006-05-17
GB2410108B (en) 2006-09-13
GB2410108A (en) 2005-07-20

Similar Documents

Publication Publication Date Title
DE10393918T5 (de) Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern
DE112008002158B4 (de) Verfahren und System zur Multiplikation großer Zahlen
DE19835216B4 (de) Prozessor und Verfahren zur parallelen Datenverarbeitung
DE60215835T2 (de) Reduzierung von komponenten in einer montgomery multiplikations-recheneinheit
DE19581638C2 (de) Rechenvorrichtung mit einem Mikroprozessor, einem neuralen Netz-Koprozessor und einer DMA-Steuervorrichtung
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
JP4778086B2 (ja) マトリックスのコサイン変換を計算するためのデータ処理装置およびその方法
DE60314584T2 (de) Maskierung von in einem Restklassensystem zerlegten bzw. faktorisierten Daten
DE69821408T2 (de) Multiplikationsverfahren und -vorrichtung
DE4403917C2 (de) Vorrichtung zum Berechnen einer Bit-Besetzungszählung
DE19758079A1 (de) Verfahren und Vorrichtung zur Galoisfeld-Multiplikation
DE10297000T5 (de) Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung
DE60022206T2 (de) Registerspeicher zur verarbeitung von 2-d matrix
DE102019112353A1 (de) Lade/speicher-befehl
DE102019112352A1 (de) Registerdateien in einem multithread-prozessor
EP1499954B1 (de) Berechnung eines ergebnisses einer modularen multiplikation
DE102016205020A1 (de) SIMD-Realisierung von Schablonencodes
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
EP0557314A1 (de) Schaltungsanordnung zur berechnung von matrixoperationen in der signalverarbeitung
DE60316342T2 (de) Multiplizierer mit nachschlagetabellen
DE10219161A1 (de) Vorrichtung und Verfahren zum Umrechnen eines Terms
DE19827238B4 (de) Verfahren zum Betrieb eines Vektorrechners
US20180373676A1 (en) Apparatus and Methods of Providing an Efficient Radix-R Fast Fourier Transform
DE4001232C2 (de) Gleitkommaeinheit
DE69836408T2 (de) Verfahren zum Ausführen von arithmetischen und logischen Operationen in Feldern eines Wort-Operanden

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 10393918

Country of ref document: DE

Date of ref document: 20060316

Kind code of ref document: P

8131 Rejection