-
BEZUGNAHME AUF VERWANDTE ANMELDUNGEN
-
Die vorliegende Anmeldung beansprucht die Priorität der am 19. Februar 2021 eingereichten vorläufigen US-Patentanmeldung mit dem Aktenzeichen 63/151.328 und dem Titel „MULTIPLY AND ACCUMULATION DEVICE“ sowie der am 18. März 2021 eingereichten vorläufigen US-Patentanmeldung mit dem Aktenzeichen 63/162.818 und dem Titel „MULTIPLY AND ACCUMULATION DEVICE“, die durch Bezugnahme in die vorliegende Anmeldung aufgenommen sind.
-
HINTERGRUND
-
Die vorliegende Erfindung betrifft allgemein In-Memory-Computing oder Compute-In-Memory (CIM) und insbesondere Speichermatrizen, die bei der Datenverarbeitung, wie etwa Multiply-Accumulate-Operationen (MAC-Operationen), verwendet werden. Compute-In-Memory- oder In-Memory-Computing-Systeme speichern Informationen in einem Haupt-Direktzugriffsspeicher (Haupt-RAM) von Computern und führen Berechnungen auf einer Speicherzellen-Ebene aus, statt für jeden Rechenschritt große Mengen von Daten zwischen dem Haupt-RAM und einem Datenspeicher zu verschieben. Da auf gespeicherte Daten viel schneller zugegriffen werden kann, wenn sie in einem RAM gespeichert sind, können die Daten durch Compute-In-Memory in Echtzeit analysiert werden, was ein schnelleres Melden und Entscheiden bei Geschäfts- und Machine-Learning-Anwendungen ermöglicht. Zurzeit werden Anstrengungen zum Verbessern der Leistung von CIM-Systemen unternommen.
-
Figurenliste
-
Aspekte der vorliegenden Erfindung lassen sich am besten anhand der folgenden detaillierten Beschreibung in Verbindung mit den beiliegenden Zeichnungen verstehen. Es ist zu beachten, dass gemäß der branchenüblichen Praxis verschiedene Merkmale nicht maßstabsgetreu dargestellt sind. Vielmehr können die Abmessungen der verschiedenen Merkmale zugunsten einer klaren Erläuterung willkürlich vergrößert oder verkleinert sein. Außerdem sind die Zeichnungen als Beispiele für Ausführungsformen der Erfindung nur erläuternd und sollen nicht beschränkend sein.
- 1 ist ein Blockdiagramm, das ein Beispiel für eine CIM-Vorrichtung gemäß einigen Ausführungsformen zeigt.
- 2 ist ein Schaltbild, das ein Beispiel für eine SRAM-Speicherzelle zeigt, die gemäß einigen Ausführungsformen in der CIM-Vorrichtung von 1 verwendet wird.
- 3 ist ein Schaltbild, das ein Beispiel für eine Speicherzelle und ein NOR-Gate zeigt, die gemäß einigen Ausführungsformen in der CIM-Vorrichtung von 1 verwendet werden.
- 4 ist ein Schaltbild, das ein Beispiel für eine SRAM-Speicherzelle und ein NOR-Gate zeigt, die gemäß einigen Ausführungsformen mit einer Speicherzelle in der CIM-Vorrichtung von 1 verbunden sind.
- 5 ist ein Schaltbild, das ein Beispiel für eine Speicherzelle und ein UND-Gate zeigt, die gemäß einigen Ausführungsformen in der CIM-Vorrichtung von 1 verwendet werden.
- 6 ist ein Schaltbild, das ein Beispiel für eine SRAM-Speicherzelle und ein UND-Gate zeigt, die gemäß einigen Ausführungsformen mit einer Speicherzelle in der CIM-Vorrichtung von 1 verbunden sind.
- 7 ist ein Blockdiagramm, das eine bitserielle Multiplikationsoperation gemäß einigen Ausführungsformen zeigt.
- 8 ist ein Blockdiagramm, das weitere Aspekte der in 7 gezeigten bitseriellen Multiplikationsoperation gemäß einigen Ausführungsformen zeigt.
- 9 ist ein Ablaufdiagramm, das ein Beispiel für ein Verfahren gemäß einigen Ausführungsformen zeigt.
- 10 ist ein Blockdiagramm, das weitere Aspekte der in 1 gezeigten CIM-Vorrichtung gemäß einigen Ausführungsformen zeigt.
- 11 ist ein Blockdiagramm, das eine bitserielle Multiplikationsoperation gemäß einigen Ausführungsformen zeigt.
- 12 ist ein Blockdiagramm, das weitere Aspekte der in 1 gezeigten CIM-Vorrichtung gemäß einigen Ausführungsformen zeigt.
-
DETAILLIERTE BESCHREIBUNG
-
Die nachstehende Beschreibung liefert viele verschiedene Ausführungsformen oder Beispiele zum Implementieren verschiedener Merkmale des bereitgestellten Gegenstands. Nachstehend werden spezielle Beispiele für Komponenten und Anordnungen beschrieben, um die vorliegende Erfindung zu vereinfachen. Diese sind natürlich lediglich Beispiele und sollen nicht beschränkend sein. Zum Beispiel kann die Herstellung eines ersten Elements über oder auf einem zweiten Element in der nachstehenden Beschreibung Ausführungsformen umfassen, bei denen das erste und das zweite Element in direktem Kontakt hergestellt werden, und sie kann auch Ausführungsformen umfassen, bei denen zusätzliche Elemente zwischen dem ersten und dem zweiten Element hergestellt werden können, sodass das erste und das zweite Element nicht in direktem Kontakt sind. Darüber hinaus können in der vorliegenden Erfindung Bezugszahlen und/oder -buchstaben in den verschiedenen Beispielen wiederholt werden. Diese Wiederholung dient der Einfachheit und Übersichtlichkeit und schreibt an sich keine Beziehung zwischen den verschiedenen erörterten Ausführungsformen und/oder Konfigurationen vor.
-
Darüber hinaus können hier räumlich relative Begriffe, wie etwa „darunter befindlich“, „unter“, „untere(r)“/„unteres“, „darüber befindlich“, „obere(r)“/„oberes“ und dergleichen, zur einfachen Beschreibung der Beziehung eines Elements oder einer Struktur zu einem oder mehreren anderen Elementen oder Strukturen verwendet werden, die in den Figuren dargestellt sind. Die räumlich relativen Begriffe sollen zusätzlich zu der in den Figuren dargestellten Orientierung andere Orientierungen der in Gebrauch oder in Betrieb befindlichen Vorrichtung umfassen. Die Vorrichtung kann anders ausgerichtet werden (um 90° gedreht oder in einer anderen Orientierung), und die räumlich relativen Deskriptoren, die hier verwendet werden, können entsprechend interpretiert werden.
-
Die vorliegende Erfindung betrifft allgemein Compute-In-Memory (CIM). Ein Beispiel für CIM-Anwendungen sind Multiply-Accumulate-Operationen (MAC-Operationen). Für die künstliche Intelligenz (KI) von Computern werden Deep-Learning-Methoden verwendet, wobei ein Rechensystem als ein neuronales Netzwerk organisiert sein kann. Ein neuronales Netzwerk bezeichnet eine Mehrzahl von miteinander verbundenen Verarbeitungsknoten, die zum Beispiel eine Analyse von Daten ermöglichen. Neuronale Netzwerke berechnen „Gewichte“ zum Durchführen einer Berechnung an neuen Eingangsdaten. Neuronale Netzwerke verwenden mehrere Schichten von Rechenknoten, wobei tiefere Schichten Berechnungen aufgrund von Ergebnissen von Berechnungen durchführen, die von höheren Schichten durchgeführt worden sind.
-
Beim Machine Learning (ML) werden Computeralgorithmen verwendet, die sich automatisch durch Erfahrung und durch Verwenden von Daten verbessern können. Dies wird als ein Teil der künstlichen Intelligenz angesehen. Mit Machine-Learning-Algorithmen wird ein Modell aufgrund von Beispieldaten erzeugt, die als „Trainingsdaten“ bekannt sind, um Vorhersagen oder Entscheidungen zu treffen, ohne dass diese Algorithmen explizit dafür programmiert sind.
-
Neuronale Netzwerke können eine Mehrzahl von miteinander verbundenen Verarbeitungsknoten umfassen, die eine Datenanalyse zum Vergleichen einer Eingabe mit diesen „trainierten“ Daten ermöglichen. Trainierte Daten beziehen sich auf eine computergestützte Analyse von Eigenschaften bekannter Daten, um Modelle zu entwickeln, die zum Vergleichen von Eingangsdaten verwendet werden. Ein Beispiel für eine Anwendung von KI und Datentraining ist bei der Objekterkennung zu finden, bei der ein System die Eigenschaften von zahlreichen (zum Beispiel mehreren Tausend) Bildern analysiert, um Muster zu bestimmen, die zum Durchführen einer statistischen Analyse verwendet werden können, um ein Eingangsobjekt zu identifizieren.
-
Wie vorstehend dargelegt worden ist, berechnen neuronale Netzwerke Gewichte, um eine Berechnung an Eingangsdaten durchzuführen. Neuronale Netzwerke verwenden mehrere Schichten von Rechenknoten, wobei tiefere Schichten Berechnungen aufgrund von Ergebnissen von Berechnungen durchführen, die von höheren Schichten durchgeführt worden sind. Machine Learning stützt sich zurzeit auf die Berechnung von Punktprodukten und absoluten Differenzen von Vektoren, die normalerweise mit MAC-Operationen berechnet werden, die an Parametern, Eingangsdaten und Gewichten ausgeführt werden. Für die Berechnung von großen und tiefen neuronalen Netzwerken werden normalerweise so viele Datenelemente verwendet, dass es nicht praktisch ist, sie in einem Prozessor-Cache zu speichern, und daher werden sie meistens in einem Speicher gespeichert.
-
Somit ist Machine Learning mit der Berechnung und dem Vergleich von zahlreichen unterschiedlichen Datenelementen sehr rechenintensiv. Die Berechnung von Operationen in einem Prozessor ist um Größenordnungen schneller als die Übertragung von Daten zwischen dem Prozessor und Hauptspeicherressourcen. Aufgrund der Speichergrößen, die zum Speichern der Daten benötigt werden, ist ein Abspeichern aller Daten näher an dem Prozessor in Caches für die große Mehrheit von praktischen Systemen unerschwinglich. Somit wird die Übertragung von Daten zu einem Haupt-Engpass für KI-Berechnungen. Wenn die Datensätze größer werden, können die Zeit und die Energie, die ein Rechensystem zum Verschieben von Daten aufwendet, am Ende ein Vielfaches der Zeit und der Energie betragen, die zum eigentlichen Ausführen von Operationen verwendet werden.
-
CIM-Schaltungen führen daher Operationen lokal in einem Speicher aus, ohne Daten an einen Zentralrechner senden zu müssen. Dadurch kann die Datenmenge reduziert werden, die zwischen dem Speicher und dem Zentralrechner übertragen wird, was einen höheren Durchsatz und eine höhere Leistung ermöglicht. Durch die Reduzierung der Datenverschiebung wird auch der Energieverbrauch der gesamten Datenverschiebung in der Rechenvorrichtung gesenkt.
-
Bei einigen offenbarten Ausführungsformen weist eine CIM-Vorrichtung ein Speicherarray mit Speicherzellen auf, die in Zeilen und Spalten angeordnet sind. Die Speicherzellen sind so konfiguriert, dass sie Gewichte speichern; und ein Eingangstreiber stellt Eingangssignale bereit. Eine Multiplikations- und Akkumulationsschaltung führt MAC-Operationen aus, wobei jede MAC-Operation ein Produkt aus zwei Zahlen berechnet und dieses Produkt zu einem Akkumulator (oder Addierer) addiert. Bei einigen Ausführungsformen kann eine Verarbeitungsvorrichtung oder eine dedizierte MAC-Einheit oder -Vorrichtung eine computergestützte MAC-Hardware-Logik enthalten, die einen Multiplizierer aufweist, der in einer kombinatorischen Logik implementiert ist, an die sich ein Addierer und ein Akkumulator anschließen, die das Ergebnis speichern. Die Ausgabe des Akkumulators kann zu einem Eingang des Addierers zurückgeführt werden, sodass in jedem Taktzyklus die Ausgabe des Multiplizierers zu dem Akkumulator addiert wird. Beispielhafte Verarbeitungsvorrichtungen sind unter anderem ein Mikroprozessor, ein Digitalsignalprozessor, eine anwendungsspezifische integrierte Schaltung und ein Universalschaltkreis.
-
1 ist ein Blockdiagramm, das eine beispielhafte CIM-Vorrichtung 100 gemäß der vorliegenden Erfindung zeigt. Ein CIM-Speicherarray 110 weist eine Mehrzahl von Speicherzellen auf, die so konfiguriert sind, dass sie Gewichte W speichern. Das CIM-Speicherarray 110 kann mit verschiedenen Speichervorrichtungen, wie etwa einem statischen Direktzugriffsspeicher (SRAM), implementiert werden. Bei einer typischen SRAM-Vorrichtung werden nach Aktivierung eines oder mehrerer Zugriffstransistoren in einer SRAM-Zelle mit Aktivierungssignalen von einer oder mehreren Wortleitungen (WLs) Daten über eine oder mehrere Bitleitungen (BLs) in die SRAM-Zelle geschrieben oder aus dieser gelesen.
-
2 ist ein Schaltbild, das eine beispielhafte Speicherzelle 112 gemäß einigen Ausführungsformen zeigt. Die Speicherzelle 112 umfasst unter anderem eine Sechs-Transistor(6T)-SRAM-Zelle 112. Bei einigen Ausführungsformen können mehr oder weniger als sechs Transistoren zum Implementieren der SRAM-Zelle 112 verwendet werden. Zum Beispiel kann für die SRAM-Zelle 112 bei einigen Ausführungsformen eine 4T-, 8T- oder 10T-SRAM-Struktur verwendet werden, und bei anderen Ausführungsformen kann eine Speicher-ähnliche Bitzelle oder Baueinheit verwendet werden. Die SRAM-Zelle 112 weist Folgendes auf: einen ersten Inverter, der von einem NMOS-/PMOS-Transistorpaar M1 und M2 gebildet wird; einen zweiten Inverter, der von einem NMOS-/PMOS-Transistorpaar M3 und M4 gebildet wird; und Zugriffstransistoren/Durchgangsgates M5 und M6.
-
Jeder der Inverter wird mit Strom versorgt, wobei zum Beispiel ein erster Anschluss jedes der Transistoren M2 und M4 mit einer Versorgungsspannung VDD verbunden wird, während ein erster Anschluss jedes der Transistoren M1 und M3 mit einer Referenzspannung VSS, wie etwa Erde, verbunden wird. Ein Datenbit wird in der SRAM-Zelle 112 als ein Spannungspegel an einem Knoten Q gespeichert und kann mit einer Schaltung über die Bitleitung BL gelesen werden. Ein Zugriff auf den Knoten Q wird von dem Durchgangsgate-Transistor M5 gesteuert. Ein Knoten Qbar (QB) speichert das Gegenstück zu dem Wert bei Q (z. B. wenn Q High ist, ist QB Low) und kann mit der Schaltung über eine Bitleitungsschiene BLB ausgelesen werden. Der Zugriff auf QB wird mit dem Durchgangsgate-Transistor M6 gesteuert.
-
Ein Gate des Durchgangsgate-Transistors M5 ist mit einer Wortleitung WL verbunden. Ein erster Source/Drain-Anschluss (S/D-Anschluss) des Durchgangsgate-Transistors M5 ist mit der Bitleitung BL verbunden, und ein zweiter S/D-Anschluss des Durchgangsgate-Transistors M5 ist mit den zweiten Anschlüssen der Transistoren M1 und M2 an dem Knoten Q verbunden. In ähnlicher Weise ist ein Gate des Durchgangsgate-Transistors M6 mit der Wortleitung WL verbunden. Ein erster S/D-Anschluss des Durchgangsgate-Transistors M6 ist mit der komplementären Bitleitung BLB verbunden, und einer zweiter S/D-Anschluss des Durchgangsgate-Transistors M6 ist mit zweiten Anschlüssen der Transistoren M3 und M4 an dem Knoten Q verbunden.
-
Kommen wir zu 1 zurück. Die CIM-Vorrichtung 100 weist weiterhin einen Eingangstreiber 102 und einen WL-Treiber 104 auf. Der Eingangstreiber 102 steuert Eingangssignale I an, die mittels einer Multiplikationsschaltung 114 mit Gewichten W multipliziert werden, die in dem Speicherarray 110 gespeichert sind. Der WL-Treiber 104 gibt WL-Signale aus, um die gewünschten Zeilen von Speicherzellen zu aktivieren. Ein Speichercontroller 120 empfängt Steuer-Eingangssignale und stellt Steuersignale für eine SRAM-Lese-/Schreibschaltung 122 bereit, die mit den Bitleitungen BL und BLB dem Speicherarray 110 verbunden ist, um geeignete Bitleitungen BL und BLB (d. h., Spalten) auszuwählen, die dem gespeicherten Gewicht W entsprechen. Ausgangssignale von der Multiplikationsschaltung 114 werden für eine Teilsummen-Akkumulatorschaltung 124 bereitgestellt, die die Teilsummen-Ausgaben der Multiplikationsschaltung 114 addiert, wie später näher dargelegt wird.
-
Die Multiplikationsschaltung 114 ist so konfiguriert, dass sie die Eingangssignale I und die Gewichte W multipliziert. 3 zeigt ein Beispiel, in dem die Multiplikationsschaltung 114 ein NOR-Gate 214 ist, das das Gewichtssignal W von dem Speicherarray 110 zusammen mit dem Eingangssignal I in der Form eines invertierten Auswahlsignals SELB empfängt, um ein Produkt P aus dem Gewichtssignal W und dem Auswahlsignal SELB auszugeben. 4 zeigt weitere Aspekte einer offenbarten Ausführungsform, bei der die Speicherzelle eine 6T-SRAM-Zelle 112 ist, die in 2 gezeigt ist und vorstehend erörtert worden ist, und die Multiplikationsschaltung 114 das NOR-Gate 214 mit zwei Eingängen aufweist. Ein Eingang des NOR-Gates 214 ist mit dem Knoten QB der SRAM-Zelle 112 verbunden, um ein invertiertes Gewichtssignal zu empfangen, während der andere Eingang des NOR-Gates 214 das Signal SELB empfängt.
-
5 zeigt ein weiteres Beispiel, in dem die Multiplikationsschaltung 114 ein UND-Gate 215 ist, das das Gewichtssignal W von dem Speicherarray 110 zusammen mit dem Eingangssignal I in der Form eines Auswahlsignals SEL empfängt, um ein Produkt P aus dem Gewichtssignal W und dem Auswahlsignal SEL auszugeben. 6 zeigt weitere Aspekte einer offenbarten Ausführungsform, bei der die Speicherzelle eine 6T-SRAM-Zelle 112 ist, die in 2 gezeigt ist und vorstehend erörtert worden ist, und die Multiplikationsschaltung 114 das UND-Gate 215 mit zwei Eingängen aufweist. Ein Eingang des UND-Gates 215 ist mit dem Knoten Q der SRAM-Zelle 112 verbunden, um das Gewichtssignal W zu empfangen, während der andere Eingang des UND-Gates 215 das Signal SEL empfängt.
-
In einigen Beispielen ist die Multiplikationsschaltung 114 so konfiguriert, dass sie eine bitserielle Multiplikation des Eingangssignals I und des Gewichts W von einem höchstwertigen Bit bis zu einem niedrigstwertigen Bit des Eingangssignals ausführt, sodass eine Mehrzahl von Teilprodukten entsteht. Die Teilprodukte werden an den Akkumulator 124 ausgegeben, in dem ein erstes Teilprodukt, das einem ersten Bit des Eingangssignals I entspricht, um ein Bit verschoben bleibt und dann mit einem zweiten Teilprodukt eines zweiten Bits des Eingangssignals I addiert wird, wobei das zweite Bit ein Bit nach dem ersten Bit ist. Dadurch entsteht eine erste Teilsumme.
-
Im Gegensatz dazu werden bei herkömmlichen MAC-Operationen Multiplikationsoperationen implementiert, die mit dem niedrigstwertigen Bit (LSB) beginnen. Dadurch entsteht ein Teilprodukt für das LSB des Eingangssignals I, das dann für die Akkumulation von Teilsummen nach links verschoben wird. Dies erfordert eine große Chipfläche, um Verschiebeschaltungen für jedes der eingegebenen Bits bereitzustellen. Außerdem kann die Länge der Eingabe von den Verschiebeschaltungen begrenzt werden.
-
Gemäß offenbarten Ausführungsformen empfängt der Akkumulator 124 die Teilprodukt-Eingangssignale von der Multiplikationsschaltung 114, wobei das erste empfangene Eingangssignal ein Teilprodukt aus dem höchstwertigen Bit (MSB) des Eingangssignals und dem Gewicht W ist. Zum Beispiel können die Eingangsdaten I mit Bits o bis N [d. h., ein (N+i)-Bit-Eingangssignal; N > 1] dargestellt werden, während das Gewicht W mit Bits o bis X [d. h., ein (X+1)-Bit-Gewicht; X > 1] dargestellt wird. Die bitserielle MAC-Operation beginnt mit dem MSB des Eingangssignals I, I[N]. Somit wird das erste Teilprodukt gemäß I[N] × W[X:o] erzeugt. Das zweite Teilprodukt wird gemäß I[N-1] × W[X:o] erzeugt. Die Implementierung bei einer solchen Ausführungsform ist:
1. Zyklus: | I[N] × W[X:o] |
2. Zyklus: | I[N-1] × W[X:o] |
3. Zyklus: | I[N-2] × W[X:o] |
| |
(N+1)-ter Zyklus: | I[o] × W[X:o] |
-
Ein Beispiel für diese Implementierung ist in 7 zu sehen, die die Eingabe I[N:0] und das Gewicht W[X:0] zeigt, wobei Multiplikationszyklen 300 den eingegebenen Bits I[N:0] entsprechen. Jedes Bit I[N:0] des Eingangssignals I wird seriell mit dem Gewicht W[X:0] multipliziert, wobei die Multiplikation mit dem MSB des Eingangssignals I, z. B. I[N], beginnt und mit dem LSB I[0] des Eingangssignals I endet. Wie in 8 gezeigt ist, wird somit während des ersten Zyklus das MSB des Eingangssignals I[N] mit dem Gewicht W[X:0] multipliziert, um ein erstes Teilprodukt 310 zu erzeugen; während des zweiten Zyklus wird das nächste Bit I[N-1] mit dem Gewicht W[X:0] multipliziert, um ein zweites Teilprodukt 312 zu erzeugen, und so weiter bis zu dem (N+1)-ten Zyklus, in dem das nächste LSB des Eingangssignals I[0] mit dem Gewicht W[X:0] multipliziert wird, um ein (N+1)-tes Teilprodukt 314 zu erzeugen. Wie später näher dargelegt wird, werden die Teilprodukte 310 bis 314 dann mit dem Akkumulator 124 addiert oder akkumuliert.
-
9 ist ein Ablaufdiagramm, das ein Verfahren 400 gemäß offenbarten Ausführungsformen zeigt. In einem Schritt 410 werden Eingaben I zum Beispiel aufgrund der KI-Anwendung bestimmt, wie etwa Machine Learning, neuronale Netzwerke usw. In einem Schritt 412 werden Gewichte W zum Beispiel entsprechend Trainingsdaten oder einer Konfiguration eines Nutzers bestimmt. Die Eingaben und die Gewichte werden multipliziert, wie in dem Beispiel der 7 und 8 gezeigt ist. Wie vorstehend dargelegt worden ist, wird eine bitserielle Multiplikation durchgeführt, bei der jedes Bit des Eingangssignals I mit dem Gewicht W multipliziert wird, sodass ein Teilprodukt entsteht. Insbesondere wird die bitserielle Multiplikation des Eingangssignals I und des Gewichts W von einem höchstwertigen Bit MSB des Eingangssignals I bis zu einem niedrigstwertigen Bit LSB des Eingangssignals I durchgeführt, sodass eine Mehrzahl von Teilprodukten entsteht.
-
Wie bei den vorstehend erörterten Beispielen wird in 9 unterstellt, dass die Eingangsdaten I, die in dem Schritt 410 bestimmt werden, durch Bits 0 bis N, d. h. I[N:0], dargestellt werden und das Gewicht W, das in dem Schritt 412 bestimmt wird, durch Bits 0 bis X, d. h. W[X:0], dargestellt wird. Zunächst wird ein Multiplikationszyklus i gleich N festgelegt. Somit beginnt die bitserielle MAC-Operation mit dem MSB des Eingangssignals I[i]. In einem Schritt 420 wird das erste Teilprodukt [i] entsprechend I[i] × W[X:0] erzeugt. In einem Schritt 422 wird eine Teilsumme [i] dadurch bestimmt, dass die vorhergehende Teilsumme um ein Bit nach links verschoben wird (d. h., Teilsumme I[i+1] × 21) und das nach links verschobene vorhergehende Teilprodukt zu einem zweiten Teilprodukt addiert wird, das entsprechend I[i+i] × W[X:0] bestimmt wird.
-
Wenn i > 0 ist, wird i um 1 verringert (d. h., i = i - 1), und das Verfahren 400 wird ab dem Schritt 420 nochmals durchlaufen. Dadurch wird in dem Schritt 420 ein Teilprodukt für das nächste eingegebene Bit I[i-1] bestimmt. In dem Schritt 422 wird auch hier wieder eine Teilsumme [i+1] dadurch bestimmt, dass das in dem Schritt 420 bestimmte vorhergehende Teilprodukt um ein Bit nach links verschoben wird und die nach links verschobene Teilsumme zu dem Teilprodukt addiert wird, das entsprechend I[i] × W[X:0] bestimmt wird. Die Schritte 420 und 422 werden wiederholt, bis i = 0 ist, d. h., in dem Schritt 420 wird das Teilprodukt für das LSB des Eingangssignals I bestimmt, und in dem Schritt 422 wird die entsprechende Teilsumme bestimmt.
-
Nachdem die Teilsumme für das LSB (i = 0) in dem Schritt 422 bestimmt worden ist, wird die Teilsumme, die dem LSB des Eingangssignals I entspricht, in einem Schritt 424 in eine Gesamtsumme Total-Sum[N] umgewandelt, die in einem Schritt 426 ausgegeben wird.
-
10 ist ein Blockdiagramm, das eine Ausführungsform des Akkumulators 124 der CIM-Vorrichtung 100 zeigt. Der Akkumulator 124 empfängt Teilprodukt-Ausgangssignale der MSB-zuerst-Multiplikationsschaltung 114, und er implementiert die Verschiebung nach links und die Teilsummenbestimmung des in 9 angegebenen Schritts 422. Der Akkumulator 124 weist einen Addierer 240 auf, wobei eine Verschiebeeinrichtung 244 einen Ausgang hat, der funktionsfähig mit einem ersten Eingang des Addierers 240 verbunden (wirkverbunden) ist. Die Verschiebeeinrichtung 244 ist so konfiguriert, dass sie die Verschiebung nach links in dem Schritt 424 von 9 implementiert. Ein erstes Register 242 hat einen Ausgang, der funktionsfähig mit einem Eingang der Verschiebeeinrichtung 244 verbunden ist, und ein zweites Register 246 hat einen Ausgang, der funktionsfähig mit einem zweiten Eingang des Addierers 240 verbunden ist.
-
Das zweite Register 246 empfängt die Teilprodukt-Ausgangssignale der Multiplikationsschaltung 114. Wie vorstehend dargelegt worden ist, ist die Multiplikationsschaltung 114 so konfiguriert, dass sie eine bitserielle Multiplikation des Eingangssignals I und des Gewichts W von dem MSB bis zu dem LSB des Eingangssignals I durchführt, um Teilprodukte auszugeben, die mit dem zweiten Register 246 empfangen werden. Somit empfängt während eines ersten Multiplikationszyklus i (i = N) das zweite Register 246 zunächst das Teilprodukt, das dem MSB des Eingangssignals I entspricht, multipliziert mit dem Gewicht W (d. h., i = N, wie in 9 angegeben ist). Das erste Teilprodukt (Teilprodukt [i] = I[i] × W[X:0]; i = N) wird von dem zweiten Register 246 an den Addierer 240 ausgegeben, der das Teilprodukt für das MSB des Eingangssignals I an das erste Register 242 ausgibt. Die Verschiebeeinrichtung 244 verschiebt die Teilsumme um ein Bit nach links (d. h., Teilsumme [i] = Teilsumme [i+1] × 2 + I[i] × W), und die nach links verschobene Teilsumme wird von der Verschiebeeinrichtung 244 an den Addierer 240 ausgegeben.
-
Während des nächsten Zyklus (i - 1) bestimmt der Addierer 240 die Teilsumme, die in dem Schritt 422 von 9 angegeben ist, durch Addieren der nach links verschobenen Teilsumme, die von der Verschiebeeinrichtung 244 ausgegeben wird, zu dem Teilprodukt I[i] × W[X:0]. Dies wird für (N + 1) Multiplikationszyklen wiederholt, wie in den 7 und 8 gezeigt ist. Somit gibt in dem Fall, dass i = 0 ist, wie in 9 angegeben ist, der Addierer 240 die Gesamtsumme entsprechend Gesamtsumme [N] = Teilsumme [N + 1] gemäß den Schritten 424 und 426 von 9 aus.
-
Somit wird für das Produkt jedes Bits des Eingangssignals I[N:0] × W[X:0] (d. h., jedes Teilprodukt) jede Teilsumme um ein Bit für die Teilsumme nach links verschoben, bevor die Teilsumme mit dem Teilprodukt des nächsten Bits (d. h., I[i1] × W[X:0]) von dem MSB bis zu dem LSB des Eingangssignals I addiert wird. Dadurch wird eine Gesamtsumme effektiv wie folgt berechnet:
-
Aber dadurch, dass das Teilprodukt für das MSB des Eingangssignals I zuerst bestimmt wird, ist die Verschiebeeinrichtung 244 in der Lage, die Verschiebeoperation für die Berechnung der Gesamtsumme auszuführen. Im Gegensatz dazu können herkömmliche MAC-Implementierungen, bei denen das Teilprodukt von dem LSB bis zu dem MSB des Eingangssignals bestimmt wird, eine Mehrzahl von Verschiebeeinrichtungen und von zugehörigen Schaltungen für eine entsprechende Mehrzahl von Verschiebeoperationen in Abhängigkeit von der Länge des Eingangssignals erfordern. Dies hat wiederum zur Folge, dass der Schaltungsentwurf komplizierter wird, zusätzlicher Chipplatz benötigt wird, mehr Energie verbraucht wird usw., und die Länge des Eingangssignals kann begrenzt werden.
-
7 und 8 zeigen ein Beispiel, bei dem Teilprodukte für ein einziges Eingangssignal I mit dem Akkumulator 124 akkumuliert werden. Bei anderen Implementierungen können mehrere Eingangssignale I mit dem Eingangsaktivierungstreiber 102 erzeugt werden. 11 zeigt eine solche Ausführungsform, bei der mehrere Eingangssignale 11 bis In jeweils mit dem Gewicht W[X:0] multipliziert werden.
-
In 11 werden mehrere Eingangssignale I1[N:0] ... In[N:0] jeweils mit einem Gewicht W1[X:0] ... Wn[X:0] multipliziert. Die Multiplikationszyklen 300 entsprechen jedem Bit [N:o] des entsprechenden Eingangssignals I1... In. Jedes Bit [N:0] jedes Eingangssignals I1 ... In wird seriell mit dem Gewicht W1[X:0] ... Wn[X:0] multipliziert, und zwar von dem MSB jedes Eingangssignals I1... In bis zu dem LSB I[0] des Eingangssignals. Somit wird während des ersten Zyklus das MSB jedes Eingangssignals I1... In mit dem Gewicht W1[X:0] ... Wn[X:0] multipliziert, um jeweilige Teilprodukte zu erzeugen. Während des zweiten Zyklus werden die nächsten eingegebenen Bits I[N-1] für jedes Eingangssignal I1 ... In mit dem entsprechenden Gewicht W1[X:0] ... Wn[X:0] multipliziert, um ein zweites Teilprodukt zu erzeugen, und so weiter bis zu dem (N+i)-ten Zyklus, in dem das LSB der Eingangssignale I[0] mit dem Gewicht W[X:o] multipliziert wird, um ein (N+1)-tes Teilprodukt zu erzeugen.
-
12 zeigt ein Beispiel für den Akkumulator 124 und die Multiplikationsschaltung 114. In dem Beispiel der 11 und 12 werden die Teilprodukte, die während jedes Multiplikationszyklus erzeugt werden, mit der Multiplikationsschaltung 114 summiert. Die Multiplikationsschaltung 114 kann zum Beispiel eine Addierschaltung zum Summieren der Teilprodukte für jedes der Eingangssignale aufweisen. Die Summe jedes Teilprodukts wird dann von der Multiplikationsschaltung 114 an den Akkumulator 124 ausgegeben. Wie bei dem Beispiel von 10 empfängt der in 12 gezeigte Akkumulator 124 die summierten Teilprodukt-Ausgangssignale der Multiplikationsschaltung 114, beginnend mit den summierten Teilprodukten, die dem MSB der Eingangssignale I1 ... In entsprechen. Der Akkumulator 124 ist so konfiguriert, dass er die Verschiebung nach links und die Teilsummenbestimmung des in 9 angegebenen Schritts 422 implementiert.
-
Der Ausgang der Verschiebeeinrichtung 244 ist funktionsfähig mit einem ersten Eingang des Addierers 240 verbunden, wobei die Verschiebeeinrichtung 244 so konfiguriert ist, dass sie die Nach-links-Verschiebung des Schritts 424 von 9 implementiert. Ein erstes Register 242 hat einen Ausgang, der funktionsfähig mit einem Eingang der Verschiebeeinrichtung 244 verbunden ist, und ein zweites Register 246 hat einen Ausgang, der funktionsfähig mit einem zweiten Eingang des Addierers 240 verbunden ist. Das zweite Register 246 empfängt die summierten Teilprodukt-Ausgangssignale der Multiplikationsschaltung 114. Wie vorstehend dargelegt worden ist, ist die Multiplikationsschaltung 114 so konfiguriert, dass sie eine bitserielle Multiplikation jedes der Eingangssignale I1... In und des Gewichts W von dem MSB bis zu dem LSB der Eingangssignale durchführt, um summierte Teilprodukte auszugeben, die mit dem zweiten Register 246 empfangen werden. Somit empfängt während eines ersten Multiplikationszyklus i (i = N) das zweite Register 246 zunächst die summierten Teilprodukte, die dem MSB der Eingangssignale I1 ... In entsprechen, multipliziert mit dem Gewicht W (d. h., i = N, wie in 9 angegeben ist). Das erste Teilprodukt (Teilprodukt [i] = I[i] × W[X:0]; i = N) wird von dem zweiten Register 246 an den Addierer 240 ausgegeben, der das Teilprodukt für das MSB des Eingangssignals I an das erste Register 242 ausgibt. Die Verschiebeeinrichtung 244 verschiebt die Teilsumme um ein Bit nach links (d. h., Teilsumme [i] = I[i] × W[X:0] × 21), und die nach links verschobene Teilsumme wird von der Verschiebeeinrichtung 244 an den Addierer 240 ausgegeben.
-
Während des nächsten Zyklus (i - 1) bestimmt der Addierer 240 die Teilsumme, die in dem Schritt 422 von 9 angegeben ist, durch Addieren des nach links verschobenen Teilprodukts, das von der Verschiebeeinrichtung 244 ausgegeben wird, zu dem Teilprodukt I[i+1] × W[X:o]. Dies wird für (N + 1) Multiplikationszyklen wiederholt, wie in 11 gezeigt ist. Somit gibt in dem Fall, dass i = 0 ist, wie in 9 angegeben ist, der Addierer 240 eine Gesamtsumme entsprechend Gesamtsumme [N] = Teilsumme [N + 1] gemäß den Schritten 424 und 426 von 9 aus.
-
Offenbarte Ausführungsformen umfassen somit ein Berechnungsverfahren, das so konfiguriert ist, dass es eine bitserielle Multiplikation in einer CIM-Vorrichtung durchführt. Die CIM-Vorrichtung empfängt mindestens eine Eingabel entsprechend einer Art einer Anwendung und mindestens ein Gewicht entsprechend einem Trainingsergebnis oder einer Konfiguration eines Nutzers. Die CIM-Vorrichtung führt eine bitserielle Multiplikation aufgrund des Eingangssignals und des Gewichts von einem höchstwertigen Bit (MSB) des Eingangssignals bis zu einem niedrigstwertigen Bit (LSB) des Eingangssignals aus, um ein Ergebnis entsprechend einer Mehrzahl von Teilprodukten zu erhalten. Eine erste Teilsumme eines ersten Bits des Eingangssignals wird um ein Bit nach links verschoben und dann mit einem zweiten Teilprodukt eines zweiten Bits des Eingangssignals addiert, um eine zweite Teilsumme des zweiten Bits zu erhalten. Das zweite Bit ist ein Bit nach dem ersten Bit, und das Ergebnis wird mit der CIM-Vorrichtung ausgegeben.
-
Gemäß weiteren Aspekten weist eine CIM-Vorrichtung einen Addierer; und eine Verschiebeeinrichtung mit einem Ausgangsanschluss auf, der funktionsfähig mit einem ersten Eingangsanschluss das Addierers verbunden ist. Die Verschiebeeinrichtung ist so konfiguriert, dass sie ein Bit nach links verschiebt. Ein erstes Register weist einen Ausgangsanschluss auf, der funktionsfähig mit einem Eingangsanschluss der Verschiebeeinrichtung verbunden ist. Ein zweites Register weist einen Ausgangsanschluss auf, der funktionsfähig mit einem zweiten Eingangsanschluss des Addierers verbunden ist. Ein Multiplizierer ist so konfiguriert, dass er eine bitserielle Multiplikation aufgrund eines Eingangssignals und eines Gewichtssignals durchführt, um eine Mehrzahl von Teilprodukten zu erhalten. Ein Eingangsanschluss des zweiten Registers ist so betreibbar, dass er ein erstes der Mehrzahl von Teilprodukten aufgrund eines höchstwertigen Bits (MSB) des Eingangssignals empfängt. Ein Eingangsanschluss des ersten Registers ist so betreibbar, dass er ein Ausgangssignal des Addierers empfängt.
-
Gemäß noch weiteren offenbarten Aspekten weist eine CIM-Vorrichtung ein Speicherarray auf, das ein Gewicht speichert. Ein Eingangstreiber ist so konfiguriert, dass er ein Eingangssignal ausgibt. Ein Multiplizierer ist so konfiguriert, dass er eine bitserielle Multiplikation des Eingangssignals und des Gewichtssignals von einem MSB des Eingangssignals bis zu einem LSB des Eingangssignals durchführt, um eine Mehrzahl von Teilprodukten zu bestimmen. Eine Verschiebeeinrichtung ist so konfiguriert, dass sie eine erste Teilsumme eines ersten Bits des Eingangssignals um ein Bit nach links verschiebt. Ein Addierer ist so konfiguriert, dass er die nach links verschobene erste Teilsumme und ein zweites Teilprodukt eines zweiten Bits des Eingangssignals addiert, um ein zweites Teilprodukt des zweiten Bits zu erhalten, das ein Bit nach dem ersten Bit ist.
-
Vorstehend sind verschiedene Ausführungsformen umrissen, sodass der Fachmann die Aspekte der vorliegenden Erfindung besser verstehen kann. Der Fachmann erkennt, dass die vorliegende Erfindung ohne Weiteres als eine Grundlage zum Gestalten oder Modifizieren anderer Verfahren und Strukturen zum Erreichen der gleichen Ziele und/oder zum Erzielen der gleichen Vorzüge wie bei den hier vorgestellten Ausführungsformen verwendet werden kann. Der Fachmann erkennt ferner, dass solche äquivalenten Auslegungen nicht von dem Grundgedanken und Schutzumfang der vorliegenden Erfindung abweichen und dass hierin verschiedene Änderungen, Ersetzungen und Abwandlungen vorgenommen werden können, ohne von dem Grundgedanken und Schutzumfang der vorliegenden Erfindung abzuweichen.