DE4036455C1 - - Google Patents
Info
- Publication number
- DE4036455C1 DE4036455C1 DE4036455A DE4036455A DE4036455C1 DE 4036455 C1 DE4036455 C1 DE 4036455C1 DE 4036455 A DE4036455 A DE 4036455A DE 4036455 A DE4036455 A DE 4036455A DE 4036455 C1 DE4036455 C1 DE 4036455C1
- Authority
- DE
- Germany
- Prior art keywords
- matrix
- circuit arrangement
- multiplier
- adder
- memory
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Description
Die Erfindung betrifft eine Schaltungsanordnung zur Berechnung
von Matrixoperationen, wie sie in der Signalverarbeitung,
speziell im Zusammenhang mit neuronalen Netzen, immer wieder
vorkommen. Weil sich die zur Berechnung neuronaler Netze erforderlichen
Rechenoperationen auf eine überschaubare Anzahl
elementarer Matrixoperationen zurückführen lassen, ist es im
Hinblick auf die erforderliche hohe Rechengeschwindigkeit
bei der Ausführung dieser Operationen sinnvoll, solche Rechenoperationen
nicht mit Hilfe von Software auszuführen, sondern
in Hardware zu implementieren.
Ein der Erfindung am nächsten liegender Stand der Technik
wird in der Veröffentlichung von U. Ramacher, "Design of a
first Generation Neurocomputer", VLSI Design of Neural Networks,
edited by U. Ramacher, U. Rückert, Kluwer Academic
Publishers, Nov. 1990, wiedergegeben. In dieser Veröffentlichung
wird eine Schaltungsanordnung beschrieben, welche
aus einer systolischen Anordnung von Multiplizierern und
Addierern aufgebaut ist. Diese systolische Anordnung ermöglicht
das Berechnen von Matrixprodukten, wobei die zu
multiplizierenden Matrizen in Blöcke der Größe 4×4 zerlegt
werden, und wobei mit Hilfe der systolischen Anordnung
jeweils Submatrizen dieser Größe multipliziert werden
können. Die mit dieser Schaltungsanordnung ausführbaren
Rechenoperationen sind für die Berechnung bestimmter neuronaler
Netztypen, wie z. B. mehrlagiger rückgekoppelter
Perceptronnetze geeignet.
Nachteile dieser Schaltungsanordnung, wie sie in der Veröffentlichung
von U. Ramacher 1990 beschrieben ist, sind vor
allem darin zu sehen, daß
- - die Transposition, Addition und Subtraktion von Matrizen nicht unterstützt wird,
- - Ergebnismatrizen nicht quadriert oder mit einem Skalar multipliziert werden können und daß
- - die Berechnung von Zeilen- bzw. Spaltensummen bzw. die Suche extremaler Matrixelemente von dieser Schaltungsanordnung nicht unterstützt werden.
Ferner findet bei dieser Schaltungsanordnung keine Überwachung
des Wertebereichs der Matrixkoeffizienten statt, und
die Wertebereiche der Matrixelemente werden bei eingetretenem
Überlauf nicht begrenzt.
Die der Erfindung zugrundeliegende Aufgabe besteht darin,
eine Schaltungsanordnung anzugeben, mit welcher die beschriebenen
Nachteile des Standes der Technik überwunden werden,
und welche die Berechnung von Matrixprodukten sowie die Multiplikation
von Matrixprodukten mit Skalaren, als auch die Quadrierung
von Matrixprodukten, die Summen und Differenzbildung
von Matrizen, die Multiplikation von Matrixsummen bzw. Matrixdifferenzen
mit Skalaren, die Betragsbildung von Matrixsummen
bzw. Matrixdifferenzen, die Quadrierung von Matrixsummen und
Differenzen, die Transposition von Matrizen und Matrixprodukten,
die Berechnung von Zeilen- bzw. Spaltensummen von Matrizen
sowie die Suche extremaler, d. h. minimaler bzw. maximaler
Matrixelemente unterstützt. Diese Aufgabe wird durch eine
Schaltungsanordnung zur Berechnung von Matrixoperationen mit
Merkmalen gemäß Anspruch 1 gelöst.
In einer Weiterbildung der erfindungsgemäßen Schaltungsanordnung
ist ebenfalls eine systolische Anordnung von
Multiplizierern und Addierern vorgesehen. Im Gegensatz
zu der aus dem Stand der Technik bekannten Schaltungsanordnung
ist in der erfindungsgemäßen Schaltungsanordnung
dieser systolischen Anordnung aus Multiplizierern
und Addierern ein rekursiver Akkumulator nachgeschaltet.
Mit Hilfe dieses rekursiven Akkumulators ist die Durchführung
einer wesentlich umfassenderen Klasse von Rechenoperationen
möglich. Mit der erfindungsgemäßen Schaltungsanordnung
ist es insbesondere möglich, Matrixprodukte mit Skalaren zu
multiplizieren, Matrizen oder Matrixprodukte zu quadrieren,
Summen oder Differenzen von Matrizen zu bilden und mit Skalaren
zu multiplizieren, den Absolutbetrag von Matrixsummen bzw. Matrixdifferenzen
und deren Quadrate zu berechnen und Matrizen
zu transponieren. Darüber hinaus ermöglicht die erfindungsgemäße
Schaltungsanordnung die Berechnung von Zeilen bzw. Spaltensummen
von Matrizen bzw. Matrixprodukten bzw. Summen oder
Differenzen von Matrizen. Schließlich ermöglicht diese Schaltungsanordnung
die Suche nach maximalen bzw. minimalen Matrixelementen
in zuvor berechneten Matrizen.
Weiterbildungen der Erfindung ergeben sich aus den Unteransprüchen.
Im folgenden wird die Erfindung anhand von Figuren und
anhand eines bevorzugten Ausführungsbeispiels beschrieben.
Fig. 1 zeigt einen Signalflußplan einer Schaltungsanordnung
zur Berechnung von Matrixoperationen.
Fig. 2 zeigt eine vorzugsweise Realisierung einer Teilschaltung
der Schaltung aus Fig. 1, welche in Fig. 1
als Matrixmultiplizierer bezeichnet ist.
Die Fig. 4, 5, 6 und 7 zeigen Signalflußpläne zur
Ansteuerung der Speichereinheiten B1, B2, B3 und B4.
Fig. 3 zeigt eine bevorzugte Realisierung einer Teilschaltung
der Schaltungsanordnung aus Fig. 1, welche in Fig. 1
als rekursiver Akkumulator bezeichnet ist.
Wie in Fig. 1 dargestellt, besteht die erfindungsgemäße
Schaltungsanordnung aus zwei Teilschaltungen, welche als
Matrixmultiplizierer MM bzw. als rekursiver Akkumulator
AA bezeichnet sind. Die Gesamtschaltung hat zwei Eingänge,
welche mit in1 bzw. in3 bezeichnet sind, einen Ausgang
welcher mit out3 bezeichnet ist und eine bidirektionale
Schnittstelle, welche mit inout2 bezeichnet ist. Die bidirektionale
Schnittstelle kann mit Hilfe des Signals Port2c gesteuert
werden. Die Koeffizienten zwei miteinander zu multiplizierender
Matrizen werden über die Schnittstellen in1 bzw.
inout2 und die damit verbundenen Speicher B1 bzw. B2 einer
systolischen Anordnung aus vier Multiplizierern und vier Addierern
zugeführt. Die Eingangsdaten der Multiplizierer der systolischen
Anordnung werden dabei mit Hilfe des Schalters S1, welcher
über das Signal SEN1 gesteuert wird, ausgewählt. Die
Addiererkette der systolischen Anordnung ist mit dem Ausgang
eines EXOR-Gatters verbunden, dessen erster Eingang über den
Schalter S2, welcher mit Hilfe des Signals SEN2 gesteuert wird,
mit dem Speicher B2 verbunden ist. Die anderen Eingänge der
Multiplizierer sind mit dem Speicher B1 verbunden. Dieser
Speicher ist eine Zusammenfassung von vier unabhängigen Speichern,
welche jeweils zweimal vier Worte umfassen. Zur Zwischenspeicherung
von Daten und Rechenergebnissen sind in
der systolischen Anordnung sowie in der Gesamtschaltung überall
Latches vorgesehen. Diese tragen keine rechnerischen
Funktionen, sondern ermöglichen lediglich den synchronen Ablauf
der Gesamtschaltung, und werden zur Realisierung algorithmisch
bedingter Zeitverzögerungen benötigt. Am Ende der
Addiererkette der systolischen Anordnung befindet sich ein
finaler Addierer Fin1, welcher die Überträge der mit Add bezeichneten
Carry-Save-Addierer zum Carry-Select-Format zusammenfaßt.
Eine bevorzugte Ausführungsform der Multiplizierer
innerhalb der systolischen Anordnung ist in dem Aufsatz von
U. Ramacher, 1990, beschrieben.
An den in Fig. 1 abgebildeten Matrixmultiplizierer, welcher
in Fig. 2 näher beschrieben ist, schließt sich in der Gesamtschaltung
(siehe Fig. 1) ein rekursiver Akkumulator an, welcher
in Fig. 3 abgebildet ist. Am Eingang dieses rekursiven Akkumulators
befindet sich ein Multiplizierer AM, dem ein Addierer
AA nachgeschaltet ist. Ein Eingang dieses Multiplizierers
ist mit dem Ausgang des finalen Addierers des Matrixmultiplizierers
verbunden. Der zweite Eingang des Multiplizierers
kann je nach Stellung des Schalters S3, welcher über das
Signal SEN3 gesteuert wird, mit dem Ausgang des Speichers B4
oder mit dem Ausgang des finalen Addierers verbunden werden
oder mit dem konstanten Wert 1 belegt werden. Der zweite Eingang
des diesem Multiplizierer nachgeschalteten Addierers AA
ist mit dem Ausgang eines zweiten EXOR-Gatters verbunden.
Ein Eingang dieses zweiten EXOR-Gatters ist über den Schalter
S4, welcher über das Signal SEN4 gesteuert wird, mit dem
Signal LOOP verbunden. Dieses Signal LOOP ist je nach Stellung
des Schalters S6, welcher über das Signal SEN6 gesteuert
wird, mit dem Signal des Eingangs in3 oder mit dem Ausgang
des Speichers B3 identisch. Letzteres ist in Fig. 3 auch
als LOC bezeichnet. Der Ausgang des Addierers AA ist über
den Schalter S51, welcher über das Signal SEN51 gesteuert
wird, mit einem zweiten finalen Addierer Fin2 verbunden. Diesem
finalen Addierer Fin2 ist ein Komparator Comp parallelgeschaltet,
welcher den Ausgang des Addierers AA mit Null vergleicht
und damit als Vorzeichenentscheider wirkt. Dieses Vorzeichensignal
bestimmt zusammen mit dem Steuersignal SEN52
die Stellung des Schalters S52, welcher je nach Schalterstellung
das mit CHAIN bezeichnete Ausgangssignal des finalen
Addierers Fin2 oder das mit B3 bezeichnete über drei Latches
verzögerte Schleifensignal mit einem durch das Signal ShiftEn
gesteuerte Shifter verbindet. Der Ausgang des Shifters ist mit
einer Überlaufkontrollschaltung Overflow verbunden, deren Ausgang
mit der Speichereinheit B3 verbunden ist.
Der Signalpfad über den Addierer AA, den finalen Addierer
Fin2 bzw. den Comparator Comp, den Shifter und die Überlaufkontrollschaltung
sowie über die Speichereinheit B3 und
das EXOR-Gatter, dessen Ausgang den zweiten Eingang des Addierers
AA bildet, stellt eine rekursive Schleife dar, mit welcher
die gegenüber dem Stand der Technik neuartigen Rechenoperationen
durchgeführt werden können.
Im Gegensatz zu der Schaltungsanordnung, welche in
dem Aufsatz von U. Ramacher, 1990, beschrieben ist, ermöglicht
die erfindungsgemäße Schaltungsanordnung neben
der Matrix-Matrixmultiplikation nun auch die Matrixaddition
und den komponentenweisen Min/Max-Vergleich. Die Eingangsmatrizen,
zerlegt in 4×4 Submatrizen, werden lokal
transponiert und dann addiert oder multipliziert. Die Komponenten
der Ergebnismatrix können wahlweise quadriert oder mit
einem Skalar multipliziert werden. Auf die hieraus entstehenden
4×4 Submatrizen kann entweder eine globale Akkumulation
oder ein Min/Max-Vergleich in Zeilen oder Spaltenrichtung
angewendet werden.
Der Wertebereich der 16bit-Gewichtswerte wird auf Überlauf
hin überwacht, und bei eingetretenem Überlauf wird der Wert
automatisch begrenzt. Mit einer speziellen Schiebeeinrichtung
kann der Wertebereich der Gewichte gezielt verändert,
z. B. schrittweise halbiert bzw. verdoppelt werden, um so
einen Überlauf zu vermeiden und die 16 bit Wortbreite des
Gewichtsspeichers effektiver zu nutzen.
Der Entwicklung der erfindungsgemäßen Schaltungsanordnung
zur Berechnung von Matrixoperationen liegt der Gedanke zugrunde,
die gesamte Rechenarbeit auf eine vorgegebene Anzahl
von elementaren Schaltungsanordnungen zu verteilen
und die zu multiplizierenden bzw. zu addierenden großen
Matrizen in 4×4 Submatrizen zu partitionieren. Jede elementare
Schaltungsanordnung bearbeitet so nur einen bestimmten
Zeilen- bzw. Spaltenbereich (Submatrizen) der in lokalen
Speichern gehaltenen Matrix. Die Berechnung großer Matrizen
wird aus der Bearbeitung der 4×4 Submatrizen zusammengesetzt.
Bei diesem Zusammensetzen werden die Indizes der Submatrizen
auf die gesamten Laufbereiche der großen Matrizen
erweitert. Operationen, die aus der Berechnung von Submatrizen
die Lösung für große Matrizen erzielen, sind die lokale
und die globale Akkumulation sowie der lokale oder globale
Min/Max-Vergleich der Komponenten.
Die erfindungsgemäße Schaltungsanordnung führt folgende
einfache Rechenoperationen aus, welche, auf verschiedene
Weise verknüpft, die neuronalen Algorithmen realisieren.
Dabei wird der Begriff Submatrix zur Bezeichnung von 4×4
Matrixblöcken verwendet, welche aus der Partitionierung
großer Matrizen entstehen.
- 1. Multiplikation von Eingangssubmatrizen
- 1.1 Submatrix A (in Speicher B1) multipliziert mit Submatrix B in Speicher (B2);
- 1.2 Submatrix A (in Speicher B1) multipliziert mit der Einheitsmatrix;
- 2. Addition/Subtraktion von Eingangssubmatrizen
- 2.1 Submatrix B (in Speicher B2) wird addiert zur Submatrix A (in Speicher B1), zuvor multipliziert mit der Einheitsmatrix;
- 2.2 Submatrix B (in Speicher B2) wird subtrahiert von Submatrix A (in Speicher B1), zuvor multipliziert mit der Einheitsmatrix;
- 2.3 Submatrix B (in Speicher B2) durch Addiererkette führen, keine Addition;
- 3. Multiplikation der Ergebnissubmatrizen aus 1.1 bis 2.2
- 3.1 Multiplikation der Ergebnissubmatrix mit einem Koeffizienten (für jede Submatrixspalte ein eigener Koeffizient).
- 3.2. Keine Multiplikation (Multiplikation mit 1).
- 3.3 Multiplikation der einzelnen Submatrixkomponenten mit sich selbst (Quadrieren).
- 4. Addition/Akkumulation von Ergebnissubmatrizen aus 3.1 bis
3.3.
- 4.1 Addition der Ergebnissubmatrix zu der in Speichereinheit B3 gespeicherten Submatrix (lokale Akkumulation).
- 4.2 Addition der Ergebnissubmatrix zu der zeitgleich an Eingang in3 angelegten Submatrix (verteilte Akkumulation).
- 5. Komponentenweiser Min/Max-Vergleich für die Ergebnissubmatrix
aus 3.1 bis 3.3.
- 5.1 Min/Max-Vergleich zwischen den Ergebnissen von 3.1 bis 3.3 und der in Speichereinheit B3 gespeicherten Submatrix.
- 5.2 Min/Max-Vergleich zwischen der Submatrix aus 3.1 bis 3.3 und einer zeitgleich am Eingang in3 angelegten Submatrix.
- 6. Überlaufregulierung von die in Speichereinheit B3 gespeicherten
Gewichte.
- 6.1 Überlauferkennung und Wertsättigung der auf 16 Bit zu beschränkenden Gewichte.
- 6.2 Gesteuerte, globale Umformatierung aller Gewichtssubmatrizen.
Die in der Schaltungsanordnung implementierten Rechenoperationen
1.1 bis 6.2 werden in verschiedenen Teilen der Gesamtschaltung
durchgeführt und können in bestimmten Kombinationen
miteinander verbunden werden, um verschiedene neuronale Algorithmen
zu unterstützen.
Kombiniert werden können:
- - Je eine Operation 1.1 bis 2.2 mit
- - je einer Operation 3.1 bis 3.3 und
- - je einer Operation 4.1 bis 5.2.
Die zwei Operationen 6.1 und 6.2 sind kombinierbar mit
4.1.
Im folgenden wird die Durchführung der einzelnen Rechenoperationen
mit Hilfe der Schaltungsanordnung und die Steuerung
der Schaltungsanordnung im einzelnen beschrieben.
Die beiden Matrizen A und B sind in den Speichern B1 und B2
geladen. Schalter S1 steht in der Position B2, Schalter S2
in der Position 0 und das Signal S/A1 hat den Wert Null. Speicher
B2 liefert mit jedem Takt über 16 Takte verteilt die
Daten B(1,1), B(2,1), . . ., B(4,4), also die Matrixelemente
der linken oberen 4×4 Submatrix der Matrix B. Die
Steuersignale CEN1, . . ., CEN4 an den Eingangsregistern
der Multiplizierer haben die Werte Null, sind also nicht
aktiv, außer zu folgenden Zeitpunkten: Im Takt 1 ist CEN1
aktiv und bewirkt das Laden des Eingangsregisters des obersten
Multiplizierers mit dem Matrixelement B(1,1). Im nachfolgenden
Takt ist CEN2 aktiv und lädt den Eingang des zweiten
Multiplizierers mit dem Matrixelement B(2,1). Im dritten
und vierten Takt werden mit CEN3 und CEN4 die Eingangsregister
der anderen zwei Multiplizierer geladen. Im fünften
Takt ist CEN1 wieder aktiv und lädt das Matrixelement B(1,2)
in den ersten Multiplizierer. Dieser Verteilungsvorgang setzt
sich zyklisch fort und endet nach dem 16. Takt, wenn das Matrixelement
B(4,4) durch CEN4=aktiv in den vierten Multiplizierer
geladen ist.
Parallel zu diesem Vorgang hält die Speichereinheit B1 die
Submatrix A(1,1), . . ., A(4,4) spaltenweise in vier getrennten
Teilspeichereinheiten und liefert diese Daten über vier
getrennte Zuleitungen an die Multiplizierer der systolischen
Anordnung (siehe Fig. 2). Der erste Multiplizierer erhält
sein erstes Matrixelement A(1,1) aus dem Speicher B1 zeitgleich
mit dem Matrixelement B(1,1). In den drei nachfolgenden
Takten liefert der Speicher B1 die Matrixelemente A(2,1),
A(3,1) und A(4,1) über die gleiche Leitung. Zwischen dem
fünften und achten Takt, wenn am Multiplizierer auch das
Matrixelement B(1,2) geladen ist, wiederholt sich das Anlegen
der Matrixelemente A(1,1), . . ., A(4,1). Nach 16 Takten,
während also die Folge der Matrixelemente A(1,1), . . ., A(4,1)
viermal an die Multiplizierer der systolischen Anordnung angelegt
wurde, ist das Lesen für den ersten Multiplizierer der
Kette beendet. Der zweite Multiplizierer erhält die Matrixelemente
A(1,2), . . ., A(4,2) von dem Speicher B1. Mit je einer
weiteren Taktverzögerung bekommen der dritte bzw. der vierte
Multiplizierer die Matrixelemente A(1,3), . . ., A(4,3) bzw.
A(1,4), . . .,A(4,4) aus dem Speicher B1. Insgesamt ergibt sich
eine Verzögerung von drei Takten zwischen dem ersten und dem
vierten Multiplizierer der Kette. Folglich erhält der letzte
Multiplizierer im 19. Takt zum vierten und letzten Male den
Wert des Matrixelements A(4,4).
Jeder Multiplizierer kann pro Takt eine Multiplikation zweier
Matrixelemente der Matrizen A bzw. B beginnen. Eine solche
Multiplikation dauert sieben Takte. Die Akkumulation der
Ergebnisse wird über die Addiererkette des Matrixmultiplizierers
in Fig. 2 bewerkstelligt. Im Takt 8 erhält der oberste,
erste Addierer das Produkt A(1,1) · B(1,1) des ersten Multiplizierers,
addiert die Null von Schalter S2 dazu und gibt
das Ergebnis im folgenden Takt (Takt 9) an den nachfolgenden
zweiten Addierer weiter. Dieser erhält gleichzeitig mit der
Summe des ersten Addierers vom zweiten Multiplizierer das
Produkt B(1,2) · A(2,1), das er zu der Summe addiert (Takt
10). In den folgenden zwei Takten kommen noch die Produkte
B(1,3) · A(3,1) sowie B(1,4) · A(4,1) dazu. Im Takt
12 liegt am Ausgang des vierten letzten Addierers die Summe
aus den vier Produkten der Matrixelemente der ersten Zeile der
Submatrix A mit der ersten Spalte der Submatrix B vor. In weiteren
Takten kommen die noch fehlenden Summen hinzu. Die gesamte
Ergebnismatrix ist vollständig berechnet, wenn die Summe
über die Produkte der Matrixelemente der vierten Zeile der
Matrix A mit den Matrixelementen der vierten Spalte der Matrix
B im 28. Takt am Ausgang der Addiererkette erscheint.
Die Rechenoperation 1.2 läuft analog zur Rechenoperation
1.1 ab, wobei die zweite Matrix B durch die Einheitsmatrix
ersetzt wird. Dazu wird der Schalter S1 zyklisch zwischen
dem Wert 1 und dem Wert 0 geschaltet. In den Takten 1, 6,
11 und 16 steht S1 auf 1, in allen anderen Takten auf 0.
Um die Rechenoperation 2.1 durchzuführen, wird die Rechenoperation
1.2, welche eine Multiplikation der in Speicher
B1 stehenden Matrix A mit der Einheitsmatrix verwirklicht,
um die Addition einer Matrix B, welche in Speicher B2 steht,
erweitert. Hierbei steht der Schalter S2 in der Position B2.
Das Steuersignal S/A1 hat den Wert Null. Alle anderen Schritte
entsprechen denen in der Rechenoperation 1.2.
Hier ist der Ablauf ganz analog zum Ablauf bei der Rechenoperation
2.1. Es ist lediglich eine Vorzeichenumkehr erforderlich,
welche durchgeführt wird, in dem das Signal S/A1
den Wert 1 erhält. Dadurch bildet das EXOR-Gatter zusammen
mit dem ihm nachgeschalteten Addierer das Zweierkomplement
der in Speicher B2 stehenden Daten.
Die Rechenoperation 2.3 wird analog zur Rechenoperation
2.1 durchgeführt, wobei aber anstelle einer Einheitsmatrix
eine Nullmatrix eingespeist wird. Dies geschieht dadurch,
daß der Schalter S1 bei sämtlichen Takten in der Position
Null steht.
Bei dieser Rechenoperation liefert die systolische Addiererkette
die bei der Beschreibung der Rechenoperation 1.1
erwähnten Summen aus Produkten von Matrixelementen aus
Zeilen der Matrix A mit Spalten der Matrix B, und zwar in
der Reihenfolge, daß zuerst die Summe über Produkte von
Matrixelementen der ersten Zeile der Matrix A mit Matrixelementen
der ersten Spalte der Matrix B und zuletzt die
Summe von Produkten aus Matrixelementen der vierten Zeile
der Matrix A mit der vierten Spalte der Matrix B berechnet
wird, beginnend vom 27. Takt an. Die oberen 19 Bit
der Daten liegen in Carry-Save-Darstellung vor und müssen
in Binärdarstellung umgewandelt werden (finaler Addierer Fin1),
bevor sie dem ersten Multiplizierer AM des rekursiven
Akkumulators als Eingangsdaten zugeführt werden können. Dabei
entsteht ein Takt Verzögerung durch den finalen Addierer
Fin1. Für die Bereitstellung der Daten an beiden Eingängen
des Multiplizierers AM ergeben sich zwei weitere Takte.
Die vom finalen Addierer Fin1 kommenden Summen über Produkte
von Matrixelementen treffen am Multiplizierer AM in
der oben beschriebenen Reihenfolge ein und werden mit den
Koeffizienten K(1), K(2), K(3) und K(4) multipliziert,
welche im Speicher B4 gespeichert sind. Dabei werden der
Reihe nach folgende Produkte gebildet:
K(1) · P(1,1), K(1) · P(2,1), K(1) · P(3,1), K(1) · P(4,1), K(2) · P(1,2), K(2) · P(2,2), . . ., K(4) · P(4,4).
K(1) · P(1,1), K(1) · P(2,1), K(1) · P(3,1), K(1) · P(4,1), K(2) · P(1,2), K(2) · P(2,2), . . ., K(4) · P(4,4).
Dabei ist das Produkt P(i, j) gleich der Summe über die
Produkte der Matrixelemente in der i-ten Zeile der Matrix A
mit den Matrixelementen in der k-ten Spalte der Matrix B.
Der Multiplizierer benötigt sieben Takte, bei jedem Takt
wird eine neue Multiplikation begonnen. Die Ergebnisse erscheinen
vom 21. bis zum 37. Takt am Ausgang des Multiplizierers
AM. Dabei steht der Schalter S3 stets in der Position
B4.
Der Schalter S3 steht in der Position 1, wodurch allen
Koeffizienten K(i) für i=1, . . ., 4 der Wert 1 zugewiesen
wird. Der sonstige Ablauf ist identisch bei der Rechenoperation
3.1.
Der Schalter S3 steht in der Position L2. Die von der Addiererkette
kommenden Werte P(i, j) werden an beide Eingänge des
Multiplizierers AM angelegt. Somit sind Multiplikanden- und
Multiplikatorwort identisch. Führt man alle anderen Schritte
analog zur Rechenoperation 3.1 durch, dann treten somit die
Produktsummen P(i, j) an die Stelle der Koeffizienten K(i),
und die Produktmatrix wird mit sich selbst multipliziert.
Gemäß der Rechenoperation 1.2 kann die Produktmatrix insbesondere
auch eine der ursprünglichen Matrizen sein.
Die von der Addiererkette des Matrixmultiplizierers kommenden
Produktsummen P(1,1), P(2,1), . . ., P(4,4) werden zu den
im Speicher B3 abgelegten Daten S(1,1), S(2,1), . . ., S(4,4)
komponentenweise addiert. Die sich ergebenden neuen Werte
der S(i, j) werden anschließend wieder im Speicher B3 abgelegt
(fetch-and-add).
Der Schalter S4 befindet sich dabei in der Stellung LOOP,
der Schalter S51 in der Stellung ADD, der Schalter S52 in
der Stellung CHAIN und der Schalter S6 in Stellung LOC. Das
Steuersignal S/A2 hat hier den Wert Null, die Steuersignale
ShiftEn und OflowEn (siehe Fig. 3) werden hier zunächst
beide auf Null gesetzt. Die Daten S(1,1), S(2,1), . . ., S(4,4)
werden in dieser Reihenfolge aus dem mit der rekursiven
Schleife verbundenen Teil des Speichers B3 gelesen. Über
die Schalter S6 und S4 und die EXOR-Gatter gelangen sie
in den Addierer AA, der aus einer Reihe Volladdierer aufgebaut
ist. Im Takt 22 wird S(1,1) zu P(1,1) addiert, im
folgenden Takt S(2,1) zu P(2,1).
In dem nachgeschalteten Final-Adder Fin2 werden Carry und
Summenwort zu einem einzigen Binärwert verknüpft. Der 50 bit
breite finale Addierer Fin2 ist eine komplexe Schaltung mit
einer hohen Durchlaufzeit, weshalb er möglichst nicht nach
jeder Addierstufe, sondern nur an einer Seite implementiert
wird. Die Laufzeit im finalen Addierer Fin2 beträgt zwei Taktperioden.
Die Ergebnisse, die neuen Werte S(1,1), . . ., S(4,4) gelangen
über den Schalter S52 zur Shiftstufe (Shifter). Hat das Signal
ShiftEn den Wert Null, so bleiben die Daten unverändert. Auch
die nachgeschaltete Überlaufsteuerung hat bei OflowEn=0
keinen Einfluß auf die Daten. Sechs Takte nachdem die alten
Werte der S(i, j) aus dem Speicher B3 gelesen wurden, werden
die neuen Werte der S(i, j) geschrieben.
Anstelle der alten Werte S(i, j) wird jeweils eine Null zu
den Produktsummen P(i, j) addiert. Dabei steht der Schalter
S4 auf Null. Der sonstige Ablauf ist wie bei der Rechenoperation
4.1.1.
Der Schalter S4 steht in der Position LOOP, der Schalter S51
in der Position ADD, der Schalter S52 in der Position CHAIN
und der Schalter S6 in der Stellung GLOBIN. Anders als bei
der Operation 4.1.1 werden die alten Werte der S(1,1), . . ., S(4,4)
nicht aus dem Speicher B3 gelesen, sondern von dem
Eingang in3 bezogen. Die Akkumulation führt über die Schalter
S6 und S4 und die Addierer AA und Fin2 sowie die Schalter
S51 und S52. Hinter dem Schalter S52 werden die Ergebnisse,
die neuen Werte S(1,1), . . ., S(4,4), nicht über den
Shifter in den Speicher B3 geschrieben, sondern direkt über
den Schalter S7 an den Ausgang out3 gelegt. Hierfür sind
fünf Takte Laufzeit notwendig.
Der Schalter S4 steht in der Stellung LOOP, der Schalter
S6 in der Stellung LOC. Das Signal S/A2 hat den Wert 1, und
das EXOR-Gatter und die nachfolgende Addierstufe AA werden
zur Bildung des Zweierkomplements der über den Schalter
S4 laufenden Daten eingesetzt. Der Schalter S51 steht
in der Position MULT5, und die Stellung des Schalters S52
ergibt sich aus dem Ergebnis des Komparators Comp, welcher
prüft, ob das Ergebnis des Addierers AA größer oder gleich
Null ist. Der Addierer bestimmt die Differenz aus dem vom
Multiplizierer AM stammenden Wert und dem Wert des Speichers
B3. Ist diese Differenz positiv, stellt der Komparator beim
MAX-Vergleich den Schalter S52 in die Stellung MULT5, beim
MIN-Vergleich in die Stellung ADD. Ist die berechnete Differenz
dagegen negativ, dann ist der Wert aus dem Speicher B3
größer als das Produkt am Ausgang des Multiplizierers AM,
und die Schalterstellungen sind vertauscht. Das über den
Schalter S52 ausgewählte Ergebnis wird ohne weitere Veränderung
im Speicher B3 gespeichert.
Im Unterschied zur Rechenoperation 5.1 steht hier der Schalter
S6 in der Stellung GLOBIN und der Schalter S7 in der
Position GLOBOUT. Alle weiteren Schritte sind analog zur
Rechenoperation 5.1.
Die Wortbreite der Gewichte in neuronalen Netzen ist gewöhnlich
auf 16 Bit begrenzt. Mit der Überlauferkennung
und Sättigung wird ein Über-/Unterschreiten der darstellbaren
Grenzwerte beim Lernvorgang unterdrückt. Die vom
Schalter S52 kommenden Daten werden in der Overflow-Einheit
auf Überlauf geprüft und ggf. gesättigt, sofern vom Controller
OflowEn=1 gesetzt ist (16 Bit Wortbreite). Bei OflowEn=0
wird keine Sättigung vorgenommen, der Datenpfad hat 50 Bitbreite.
Mit jedem erkannten Überlauf (OflowStat=1) wird ein
Überlaufzähler inkrementiert, der vom Controller lesbar ist.
Bevor Daten in den zur rekursiven Schleife gehörigen Teil
des Speichers B3 geschrieben werden, können sie um eine
Stelle nach rechts oder nach links geschoben (Shift) werden.
Der darstellbare Zahlenbereich kann während des Lernvorgangs
somit dynamisch angepaßt werden. Die Ansteuerung über
das Signal ShiftEn geschieht vom Controller aus.
Damit sind die mit Hilfe der Schaltungsanordnung ausführbaren
Matrixoperationen beschrieben. Im folgenden sollen
die Operationen in den Speichereinheiten B1, . . ., B4 ausführlich
beschrieben werden. Diese weiteren Operationen
in den Speichereinheiten B1, . . ., B4 werden ausgeführt, um
einen einfachen und effektiven Datentransport zwischen der
Schaltungsanordnung und ihrer Umgebung zu ermöglichen (z. B.
gleichzeitiges Laden, Rechnen und Entladen). Ferner werden
die Matrixkomponenten für die Verarbeitung in der Schaltungsanordnung
umsortiert und je nach Wunsch transponiert. Die Ansteuerung
der einzelnen Speichereinheiten erfolgt auf die in
den Signalflußplänen der Fig. 4 bis 7 dargestellte Art und
Weise.
- 7. Operationen im Matrixspeicher B1
-
- 7.1.1 Laden, nichttransponiert
- 7.1.2 Laden, transponiert
- 7.2.1 Wechseln der Speicherhälften
- 7.2.2 Kein Wechsel der Speicherhälften
- 7.3 Lesen der Daten
-
- 8. Operationen im Matrixspeicher B2
- 8.1 Laden der Daten
- 8.2.1 Wechsel der Speicherhälften
- 8.2.2 Kein Wechsel der Speicherhälften
- 8.3.1 Lesen, nicht transponiert
- 8.3.2 Lesen, transponiert
- 8.1 Laden der Daten
- 9. Operationen im Matrixspeicher B3
- 9.1 Fetch-and-Add, in der zur Schleife gehörigen Hälfte
des Speichers B3
- 9.2.1 Wechsel der Speicherhälften
- 9.2.2 Kein Wechsel der Speicherhälften
- 9.3.1 Laden/Lesen, in der zur Schnittstelle (Port) gehörigen Speicherhälfte, nicht transponiert
- 9.3.2 Laden/Lesen, in der zur Schnittstelle gehörigen Speicherhälfte, transponiert.
- 9.1 Fetch-and-Add, in der zur Schleife gehörigen Hälfte
des Speichers B3
- 10. Operationen im Koeffizientenpuffer B4
- 10.1 Laden der Daten
- 10.2 Lesen der Daten
- 10.3 Wechsel der Speicherhälften
- 11. Steuerung der bidirektionalen Schnittstelle inout2.
- 11.1 Schnittstelle auf Eingang geschaltet
- 11.2 Schnittstelle auf Ausgabe geschaltet
In Verbindung mit den meisten Rechenoperationen wird die
Schnittstelle inout2 als Eingang benutzt (11.1) und nur
für kurze, genau spezifizierte Schritte als Ausgang (11.2).
Im folgenden werden die Operationen in den Speichereinheiten
ausführlich beschrieben. Der Kürze halber werden bei dieser
Beschreibung die Begriffe portseitig und loopseitig verwendet.
Unter portseitig soll eine der Schnittstelle zugehörige Speicherhälfte,
unter loopseitig eine der rekursiven Schleife zugewandte
Speicherhälfte verstanden werden.
Die Daten A(i, j) werden über die Schnittstelle in1 von außen
zugeführt und gelangen in den Speicher B1. Ihre Reihenfolge
ist A(1,1), A(1,2), . . ., A(4,4). Der Speicher B1 nimmt diese
16 Matrixelemente so auf, daß die Matrixelemente A(1,1), . . ., A(4,1),
also die erste Spalte der 4×4 Submatrix von A im
obersten Teil des Speichers stehen und später dem Multiplizierer
1 zugeordnet werden können. Die Matrixelemente A(1,2),
. . . A(4,2), also die Elemente der zweiten Spalte, werden in
der zweiten Speicherzeile für den Multiplizierer 2 abgelegt,
usw. Für die Ansteuerung der Speicherzellen werden die Wortleitungssignale
systolisch von Speicherwort zu Speicherwort
mit einem eingebauten Sequencer weitergegeben, so daß je
Takt nur ein Speicherwort beschrieben wird. Der Sequencer
wird über einen Triggerpuls B1PORN vom Controller angestoßen.
Ferner gilt B1PORT=0.
Im Unterschied zu 7.1.1 werden die Daten so in B1 abgelegt,
daß in der ersten Speicherzeile die Daten A(1,1), . . ., A(1,4)
gespeichert werden, in der zweiten Speicherzeile die Daten
A(2,1), . . ., A(2,4), usw. Für die veränderte Reihenfolge wird
ein eigener Sequencer notwendig, der über B1PORT angestoßen
wird (B1PORN=0).
Die Zuordnungen der beiden Hälften der Speichereinheit B1,
die eine Hälfte zum Eingang in 1 (Laden), die andere Hälfte
zur Multiplizierkette (Lesen), werden getauscht. Der Controller
initialisiert über das Steuerbit B1XCH den Wechsel
der Speicherhälften. Das Signal B1XCH wird in der Speichereinheit
B1 von Speicherzeile zu Speicherzeile mit einem Takt
Verzögerung weitergegeben, um die Laufzeit in der Addiererkette
auszugleichen. Ein Wechsel der Zuordnung der Speicherhälften
ist nur vor einer Submatrixoperation möglich, somit
frühestens alle 16 Takte.
Die in B1 gespeicherte Submatrix wird mehrmals hintereinander
für Berechnungen benötigt (Lernvorgang). Ein Überschreiben
dieser Daten wird verhindert, wenn der Wechsel der Speicherhälften
entfällt. Die multipliziererseitig gespeicherten Daten
bleiben erhalten bis zum nächsten Wechsel der Speicherhälften.
B1XCH ändert seinen Wert nicht.
Das Lesen geschieht über einen Sequencer, der über B1MULN angestoßen
wird. Für den Ablauf siehe hierzu 1.1 bis 2.3.
B2 besitzt 16 Speicherzellen. Die Daten B(i, j) werden der
Reihe nach im Speicher abgelegt. Die Ansteuerung der Speicherfelder
erfolgt durch einen Sequencer, Anstoß erfolgt über
B2PORN (s. 7.1.1).
Der Wechsel der Speicherhälften wird vom Controller über
B2XCH gesteuert. Der Wechsel erfaßt alle Pufferhälften zur
gleichen Zeit. Ein Wechsel ist zu jeder neuen Submatrixoperation,
frühestens alle 16 Takte möglich.
Durch Beibehalten des Wertes für B2XCH werden die Pufferhälften
nicht gewechselt.
Parallel zum Schreiben werden in der anderen Speicherhälfte
die Speicherzellen in gleicher Reihenfolge gelesen:
Triggerpuls B2MULN.
Triggerpuls B2MULN.
Die Reihenfolge der gelesenen Daten entspricht der transponierten
Matrix: Triggerpuls B2MULT.
Für den Fetch-and-add-Betrieb werden die in 9.1 zu schreibenden
Daten sechs Takte zuvor aus den gleichen Speicherzellen
des Speichers B3 gelesen, in denen sie später wieder abgelegt
werden (Trigger: B3LOOP).
Der Wechsel wird über B3XCH vom Controller gesteuert
(s. 8.2.1).
Beibehalten des Werts von B3XCH (s. auch 8.2.2).
Die in B3 (portseitig) befindlichen Daten werden in der
Reihenfolge S(1,1), S(2,1), . . ., S(4,4) gelesen und durch
gleichzeitig am Eingang liegende Werte ersetzt. Der Sequencer
wird durch B3PORN getriggert.
Die in B3 (portseitig) befindlichen Daten werden in der Reihenfolge
S(1,1), S(1,2), . . ., S(4,4) gelesen und durch gleichzeitig
am Eingang von B3 liegende Werte ersetzt. Der Sequencer
wird durch B3PORT getriggert.
Die Daten in B4 (Koeffizienten) werden über die Schnittstelle
in3 (OUT3) der Schaltungsanordnung zugeführt. Für das Laden
sind vier Takte notwendig. Der Triggerpuls für den Sequencer
ist B4PORN.
Der Triggerpuls für das Lesen ist B4MULN.
Zur Speicherung eines zweiten Satzes von Koeffizienten
sind vier weitere Speicherfelder vorgesehen. Ansteuerung
erfolgt über B4XCH.
Die Eingangstreiber der Schnittstelle INOUT2 sind immer
aktiv.
Die Umschaltung der Schnittstelle INOUT2 auf Ausgangsbetrieb
erfolgt über ein externes Steuerbit PORT2C, um externe
Treiberkonflikte zu vermeiden.
Bei der beschriebenen Schaltungsanordnung handelt es sich
um einen Schaltungsmodul, welcher mit gleichartigen Schaltungsmoduln
zusammengeschlossen, einen Coprozessor zur Durchführung
von Matrixoperationen ergibt. Dieser Coprozessor
wird von einer Controllerschaltung mit den nötigen Steuersignalen
versorgt.
Der interne Aufbau des Controllers und auch der Speichereinheiten
ist in der Diplomarbeit von U. Hachmann, "Controller
Architektur für einen Neuroemulator in Form eines systolischen
Arrays", Lehrstuhl für Bauelemente der Elektrotechnik, Universität
Dortmund, Dortmund 1990, beschrieben.
In dieser Patentanmeldung verwendete, allgemein übliche
Fachbegriffe zur Kennzeichnung digitaler Schaltungen sind
z. B. in Kai Hwang, "Computer Arithmetic: Principles, Architecture
and Design", John Wiley, 1979, erklärt.
Claims (8)
1. Schaltungsanordnung zur Berechnung von Matrixoperationen,
welche einen Matrixmultiplizierer (MM) und einen diesem Matrixmultiplizierer
nachgeschalteten rekursiven Akkumulator
(RA) zur Berechnung von Transpositionen, Zeilensummen und
Spaltensummen und zur Suche extremaler Matrixelemente umfaßt.
2. Schaltungsanordnung zur Berechnung von Transpositionen,
Zeilensummen und Spaltensummen von Matrizen und zur Suche
extremaler Matrixelemente, welche einen Multiplizierer (AM)
und einen diesem Multiplizierer nachgeschalteten Addierer
(AA), welcher den Ausgang des Multiplizierers mit einem Ausgang
dieser Schaltungsanordnung in rekursiver Weise verknüpft,
umfaßt.
3. Schaltungsanordnung nach Anspruch 1, wobei der Akkumulator
einen Multiplizierer und einen diesem Multiplizierer nachgeschalteten
Addierer umfaßt, welcher den Ausgang des Multiplizierers
mit einem Ausgang dieser Schaltungsanordnung in rekursiver
Weise verknüpft.
4. Schaltungsanordnung nach einem der Ansprüche 1 oder 3,
dadurch gekennzeichnet,
daß der Matrixmultiplizierer zwei Dual-Port-Speichereinheiten
(B1 bzw. B2) und eine diesen Speichereinheiten nachgeschaltete
systolische Kette aus Multiplizierern (Mul) und
Addierern (Add) umfaßt.
5. Schaltungsanordnung nach Anspruch 4,
dadurch gekennzeichnet,
daß die Addierer (Add) der systolischen Kette vom
Carry-Save-Typ sind.
6. Schaltungsanordnung nach einem der Ansprüche 1, 3, 4
oder 5,
dadurch gekennzeichnet,
daß der Matrixmultiplizierer eine systolische Kette aus
Multiplizierern (Mul) und Addierern (Add) umfaßt, an deren
Ende ein erster finaler Addierer (Fin1) vom Carry-Select-Typ
vorgesehen ist.
7. Schaltungsanordnung nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet,
daß der rekursive Akkumulator einen zweiten finalen Addierer
(Fin2) umfaßt, welcher dem Addierer (AA) nachgeschaltet und vom
Carry-Select-Typ ist.
8. Schaltungsanordnung nach einem der vorhergehenden Ansprüche,
dadurch gekennzeichnet,
daß der rekursive Akkumulator einen Komparator (Comp) umfaßt,
welcher das Ergebnis des Addierers (AA) mit Null vergleicht.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE4036455A DE4036455C1 (de) | 1990-11-15 | 1990-11-15 | |
US08/050,103 US5422836A (en) | 1990-11-15 | 1991-11-04 | Circuit arrangement for calculating matrix operations in signal processing |
PCT/DE1991/000858 WO1992009040A1 (de) | 1990-11-15 | 1991-11-04 | Schaltungsanordnung zur berechnung von matrixoperationen in der signalverarbeitung |
EP91918713A EP0557314A1 (de) | 1990-11-15 | 1991-11-04 | Schaltungsanordnung zur berechnung von matrixoperationen in der signalverarbeitung |
JP3517639A JPH06502265A (ja) | 1990-11-15 | 1991-11-04 | 信号処理におけるマトリクス演算の計算回路装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE4036455A DE4036455C1 (de) | 1990-11-15 | 1990-11-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
DE4036455C1 true DE4036455C1 (de) | 1992-04-02 |
Family
ID=6418338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4036455A Expired - Fee Related DE4036455C1 (de) | 1990-11-15 | 1990-11-15 |
Country Status (5)
Country | Link |
---|---|
US (1) | US5422836A (de) |
EP (1) | EP0557314A1 (de) |
JP (1) | JPH06502265A (de) |
DE (1) | DE4036455C1 (de) |
WO (1) | WO1992009040A1 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3726399A4 (de) * | 2017-12-29 | 2021-02-17 | Huawei Technologies Co., Ltd. | Matrixmultiplizierer |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5311459A (en) * | 1992-09-17 | 1994-05-10 | Eastman Kodak Company | Selectively configurable integrated circuit device for performing multiple digital signal processing functions |
FR2757973B1 (fr) * | 1996-12-27 | 1999-04-09 | Sgs Thomson Microelectronics | Processeur de traitement matriciel |
KR100451147B1 (ko) * | 1997-02-25 | 2004-11-26 | 엘지전자 주식회사 | 고속곱셈기 |
KR100457040B1 (ko) * | 2000-06-21 | 2004-11-10 | 패러데이 테크놀로지 코퍼레이션 | 곱셈 누산 명령을 이용한 데이터 처리 장치 및 방법 |
US7216140B1 (en) * | 2000-09-30 | 2007-05-08 | Intel Corporation | Efficient implementation of n-point DCT, n-point IDCT, SA-DCT and SA-IDCT algorithms |
JP3940714B2 (ja) * | 2003-09-25 | 2007-07-04 | 株式会社東芝 | 演算装置、および、暗号・復号演算装置 |
NZ532757A (en) * | 2004-05-04 | 2005-07-29 | Canterprise | Method and apparatus for identifying a maximum subarray |
FR2880446A1 (fr) * | 2005-01-04 | 2006-07-07 | France Telecom | Indexation par transposition de matrice de grande dimension |
US10304008B2 (en) * | 2015-03-20 | 2019-05-28 | Nec Corporation | Fast distributed nonnegative matrix factorization and completion for big data analytics |
CN112612521A (zh) * | 2016-04-26 | 2021-04-06 | 安徽寒武纪信息科技有限公司 | 一种用于执行矩阵乘运算的装置和方法 |
CN108205700B (zh) * | 2016-12-20 | 2021-07-30 | 上海寒武纪信息科技有限公司 | 神经网络运算装置和方法 |
US11105437B2 (en) * | 2017-07-03 | 2021-08-31 | Continental Automotive Systems, Inc. | Combined inlet and outlet check valve seat |
US10795678B2 (en) * | 2018-04-21 | 2020-10-06 | Microsoft Technology Licensing, Llc | Matrix vector multiplier with a vector register file comprising a multi-port memory |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB226899A (en) * | 1923-10-09 | 1925-01-08 | Robert Sohner | Improvements in motor ploughs |
JPS5932216A (ja) * | 1982-08-17 | 1984-02-21 | Sony Corp | ディジタル信号処理回路及びディジタルフィルタ |
DE3735654C2 (de) * | 1986-10-21 | 1996-05-02 | Sharp Kk | Elektronischer Rechner |
US4815019A (en) * | 1987-02-26 | 1989-03-21 | Texas Instruments Incorporated | Fast ALU equals zero circuit |
KR920004772B1 (ko) * | 1987-05-14 | 1992-06-15 | 후지쓰 가부시끼가이샤 | 순환 방정식을 고속으로 처리하는 벡터 프로세서 |
US4958312A (en) * | 1987-11-09 | 1990-09-18 | Lsi Logic Corporation | Digital multiplier circuit and a digital multiplier-accumulator circuit which preloads and accumulates subresults |
GB2226899A (en) * | 1989-01-06 | 1990-07-11 | Philips Electronic Associated | An electronic circuit and signal processing arrangements using it |
US5179531A (en) * | 1990-04-27 | 1993-01-12 | Pioneer Electronic Corporation | Accelerated digital signal processor |
EP0466997A1 (de) * | 1990-07-18 | 1992-01-22 | International Business Machines Corporation | Verbesserte digitale Signal-Verarbeitungsarchitektur |
-
1990
- 1990-11-15 DE DE4036455A patent/DE4036455C1/de not_active Expired - Fee Related
-
1991
- 1991-11-04 EP EP91918713A patent/EP0557314A1/de not_active Withdrawn
- 1991-11-04 US US08/050,103 patent/US5422836A/en not_active Expired - Fee Related
- 1991-11-04 WO PCT/DE1991/000858 patent/WO1992009040A1/de not_active Application Discontinuation
- 1991-11-04 JP JP3517639A patent/JPH06502265A/ja active Pending
Non-Patent Citations (2)
Title |
---|
DE-Z.: Informationstechnik (it), 1989,1, S. 50-58 * |
U. Ramacker: "Design of a first Generation Neurocomputer", VLSI Design of Neural Networks, Kluwer Academic Publishers, Nov. 1990 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3726399A4 (de) * | 2017-12-29 | 2021-02-17 | Huawei Technologies Co., Ltd. | Matrixmultiplizierer |
US11334648B2 (en) | 2017-12-29 | 2022-05-17 | Huawei Technologies Co., Ltd. | Matrix multiplier |
US11934481B2 (en) | 2017-12-29 | 2024-03-19 | Huawei Technologies Co., Ltd. | Matrix multiplier |
Also Published As
Publication number | Publication date |
---|---|
EP0557314A1 (de) | 1993-09-01 |
JPH06502265A (ja) | 1994-03-10 |
US5422836A (en) | 1995-06-06 |
WO1992009040A1 (de) | 1992-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4036455C1 (de) | ||
DE19835216B4 (de) | Prozessor und Verfahren zur parallelen Datenverarbeitung | |
DE3049437C2 (de) | Matrixanordnung einer Vielzahl von Verarbeitungselementen | |
DE3901995C2 (de) | ||
DE3933171A1 (de) | Einzelchip-prozessor fuer komplexe gleitkommazahlen | |
DE4403917C2 (de) | Vorrichtung zum Berechnen einer Bit-Besetzungszählung | |
DE102019126719A1 (de) | Energieeffiziente Speichersysteme und Verfahren | |
DE4345029C2 (de) | Schaltkreis für diskrete Kosinustransformation | |
DE102022100920A1 (de) | Compute-in-memory-akkumulator | |
DE2423265C3 (de) | Optimierende Rechenmaschine | |
DE102021120080A1 (de) | Compute-in-memory | |
DE19504089A1 (de) | Pipelined SIMD-Systolic Array Prozessor und dessen Arbeitsverfahren | |
EP0349819B1 (de) | In integrierter Schaltungstechnik ausgeführtes digitales neuronales Netz | |
EP0629943B1 (de) | Multiplizierer für reelle und komplexe Zahlen | |
DE19635113A1 (de) | Multiplizierer | |
EP1038235B1 (de) | Vorrichtung zum hierarchischen verbinden einer mehrzahl von funktionseinheiten in einem prozessor | |
EP0424410B1 (de) | Multiplizierer | |
DE3803183A1 (de) | Verfahren zum analysieren einer physikalischen erscheinung, insbesondere nach der methode der finiten elemente | |
DE4026410C2 (de) | Verfahren zur Matrizen-Multiplikation auf SIMD-Prozessoren | |
DE2508141A1 (de) | Verfahren zur transformation von reellen zahlen | |
DE4432269C2 (de) | Lernverfahren für ein selbstorganisierendes Neuronales Netzwerk sowie Vorrichtung zur Durchführung des Verfahrens | |
DE102019216946A1 (de) | Vorrichtung und Rechensystem zum Erproben eines Regelsystems | |
DE102020113088A1 (de) | Verfahren zur analogen Multiplikation und/oder Berechnung eines Skalarproduktes mit einer Schaltungsanordnung, insbesondere für künstliche neuronale Netzwerke | |
DE202023106035U1 (de) | Vorrichtung zur Kompression von Gewichtsblöcken in neuronalen Netzwerken in einem Rechenbeschleuniger | |
DE202023104864U1 (de) | Vorrichtung zur Matrixberechnung unter Verwendung von Datenumwandlung in einem Rechenbeschleuniger |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8100 | Publication of the examined application without publication of unexamined application | ||
D1 | Grant (no unexamined application published) patent law 81 | ||
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |