-
Technisches Gebiet
-
Die Erfindung betrifft eine Recheneinheit zur Berechnung einer Multiplikation mittels Bitshiftoperatoren. Ebenso betrifft die Erfindung ein Verfahren und ein Computerprogramm, die jeweils eingerichtet sind, die Multiplikation mittels Bitshiftoperatoren auszuführen.
-
Stand der Technik
-
Um neuronale Netze in Echtzeit ausführen zu können, wurden dedizierte Hardwarebeschleuniger entwickelt. Hardware-Beschleuniger setzen hardwareimplementierte Multiply-Accumulate-Einheiten (MAC)-Einheiten für die Multiplikationen ein. Es wurde erkannt, dass sich der Workload in einem neuronalen Netz fast ausschließlich aus Multiplikationen und Additionen zusammensetzt. Hardwarebeschleuniger erreichen folglich einen hohen Rechendurchsatz durch einen massiv parallelen Einsatz von MAC-Einheiten. Im Allgemeinen werden Netze auf Graphical Processing Units (GPUs) trainiert, wodurch das Repräsentationsformat von Netzgewichten und der Zwischenergebnisse Float32 entspricht. Dieses Zahlenformat ist für den Einsatz in Embedded Systemen weniger geeignet, da das entsprechende Embedded System Float32-MAC-Einheiten nutzen müsste, welche hohen Platz- und Energie-Bedarf mit sich bringen.
-
Vorteile der Erfindung
-
Es wird im Folgenden eine Recheneinheit vorgeschlagen, die eine Nutzung eines Zahlenformats mit reduzierter Wortbreite (z.B. 4 Bit) erlaubt, wodurch vorteilhafterweise auf Multiplizierer in Hardware verzichtet und stattdessen Bitshifts verwendet werden können. Denn Bitshifts benötigen in einer ASIC-Implementierung wesentlich (10-20x) weniger Chip-Fläche. Diese sind deshalb kostengünstiger. Ferner führt der Einsatz von Bitshifts zu einem gegenüber Multiplizieren reduzierten Energiebedarf. Die vorgeschlagene Recheneinheit bietet darüber hinaus auch eine Flexibilität hinsichtlich Auflösungsgenauigkeit und hohen Rechendurchsatz.
-
Ferner kann die Recheneinheit unterschiedlich quantisierte Gewichte von unterschiedlichen Schichten des neuronalen Netzes handhaben. Denn die Recheneinheit kann abhängig von den verwendeten Wortbreiten der Gewichte unterschiedlich betrieben werden.
-
Bekannte MAC-Einheiten der oben genannten Beschleuniger verwenden linear quantisierte Gewichte und können deshalb nicht von den Kosten-, Energie-, und Chip-Flächen-Einsparungen von einfachen Bitshifts in dem Maße profitieren, wie die vorgeschlagene Recheneinheit.
-
Mit der vorgeschlagenen Recheneinheit wird daher ein Beschleuniger vorgeschlagen, der flexibel abhängig von den Anforderungen an Genauigkeit des Zahlenformats, Energieverbrauch und Rechendurchsatz konfiguriert werden kann.
-
Offenbarung der Erfindung
-
In einem ersten Aspekt wird eine Recheneinheit zur Multiplikation eines ersten Wertes x mit einem ersten Multiplikanden w oder zur Multiplikation des ersten Wertes x mit jeweils einem zweiten und dritten Multiplikanden vorgeschlagen. Die Recheneinheit erhält den Wert x und Exponenten eines logarithmischen Zahlenformats der Multiplikanden. Im logarithmischen Zahlenformat werden die Multiplikanden jeweils durch zumindest ein Exponent zu einer vorgebbaren Basis dargestellt. Die Recheneinheit erhält zumindest zwei Exponenten ŵ1, ŵ2 eines ersten logarithmischen Zahlenformats (beispielsweise im „two-hot“-Zahlenformat) des ersten Multiplikanden oder jeweils einen Exponenten eines zweiten logarithmischen Zahlenformat (beispielsweise im „power-of-two“-Zahlenformat) der zweiten und dritten Multiplikanden. Es kann gesagt werden, dass die Exponenten entweder dem ersten Multiplikanden oder dem zweiten und dritten Multiplikanden zugeordnet sind. Die Exponenten sowie der erste Wert x sind quantisiert, beispielsweise mittels 2, 4 oder 8 Bit, oder mehr als 8 Bit und können als binäre Zahl vorliegen.
-
Die Recheneinheit umfasst ein erstes Register, in welchem entweder die zwei Exponenten ŵ1, ŵ2 des ersten Multiplikand oder der Exponent des zweiten und der Exponent des dritten Multiplikand hinterlegt sind. Ein Konfigurationsbit ist vorhanden, welches charakterisiert, ob entweder die zwei Exponenten ŵ1, ŵ2 des ersten Multiplikand oder der Exponent des zweiten und der Exponent des dritten Multiplikand in dem ersten Register hinterlegt sind. Denkbar ist auch, dass das Konfigurationsbit charakterisiert, ob die hinterlegten Exponenten des ersten Registers einem oder mehr als einem Multiplikanden zugeordnet sind oder ob diese Exponenten im ersten oder zweiten logarithmischen Zahlenformat verwendet werden. Das Konfigurationsbit kann ein gesetztes Bit in einem Register oder Speicher der Recheneinheit sein, bevorzugt im ersten Register.
-
Ferner umfasst die Recheneinheit einen ersten und zweiten Bitshiftoperator. Der Bitshiftoperator ist eingerichtet, abhängig von einem vorgebbaren (binären) Wert, eine binäre Zahl um die Anzahl der Stellen des vorgebbaren Wertes nach links (vorzugsweise in Hardware) zu verschieben. Der erste Bitshiftoperator verschiebt den ersten Wert x um eine Anzahl von Stellen, die einem Wert eines ersten Exponenten der hinterlegten Exponenten des ersten Registers entspricht. Der zweite Bitshiftoperator verschiebt den ersten Wert x um die Anzahl der Stellen, die einem Wert eines zweiten Exponenten der Exponenten des ersten Registers entspricht. Die Recheneinheit umfasst des Weiteren einen Addierer, der das Ergebnis des ersten und zweiten Bitshiftoperators aufaddiert. Die Recheneinheit ist des Weiteren eingerichtet, dann, wenn das Konfigurationsbit charakterisiert, dass der erste Multiplikand im ersten Register hinterlegt ist, das Ergebnis (B) des Addierers auszugeben und dann, wenn das Konfigurationsbit charakterisiert, dass der zweite und dritte Multiplikand im ersten Register hinterlegt sind, das Ergebnis (A) des zweiten Bitshiftoperators und das Ergebnis (C) des ersten Bitshiftoperators auszugeben. Das Ergebnis (B) liegt an einem Ausgang des Addierers vor, nachdem dieser seine Rechenoperation ausgeführt hat. Das Ergebnis (B) entspricht dem Multiplikationsergebnis des Wertes x mit dem ersten Multiplikanden. Das Ergebnis (A) entspricht dem Multiplikationsergebnis des Wertes x mit dem Multiplikanden, dem der Exponent zugeordnet ist, der für den Bitshift des zweiten Bitshiftoperators verwendet wurde. Das Entsprechende gilt für das Ergebnis (C).
-
Ein Vorteil der Recheneinheit ist einerseits, dass die vorgeschlagene Hardware einen ersten Modus (z.B. „two-hot“-Zahlenformat) bereithält, der vorzugsweise hinsichtlich der Auflösung/Zahlendarstellung einer linearen Quantisierung nahekommt und deshalb sehr genau rechnen kann, bei jedoch geringerem Flächen- und Energie-Bedarf aufgrund der Bitshiftoperatoren. Andererseits stellt die Recheneinheit einen weiteren Modus (z.B. „power-of-two“-Zahlenformat) zur Verfügung, bei dem die Effizienz respektive der Rechendurchsatz im Vordergrund steht. Bleibt der Gesamt-Workload konstant, verbraucht die Schaltung in diesem Modus besonders wenig Energie. Ist der Gesamt-Workload variable, so ist in diesem Modus der Rechendurchsatz doppelt so hoch. Daher ermöglicht die Recheneinheit nicht nur eine Energieeinsparung, sondern kann auch für einen höheren Datendurchsatz verwendet werden. Die Recheneinheit hat auch den Vorteil, dass die Auflösungsgenauigkeit durch die zwei Modi einstellbar ist und damit unterschiedliche Wortbreiten für verschiedene Schichten eines neuronalen Netzes unterstützt.
-
Es wird vorgeschlagen, dass die Recheneinheit einen weiteren Bitshiftoperator umfasst, der das Ergebnis des ersten Bitshiftoperators um eine vorgebbare Anzahl von Stellen nach links verschiebt. Diese vorgebbare Anzahl entspricht einem vorgebbaren Wert ζ, der eine unterschiedliche Auflösung der beiden Exponenten des ersten Multiplikanden charakterisiert. Der Addierer addiert das Ergebnis des zweiten Bitshiftoperators und des weiteren Bitshiftoperators auf.
-
Weiterhin wird vorgeschlagen, dass den Exponenten im ersten Register jeweils ein Vorzeichenbit (engl. sign-bit) zugeordnet ist und der Addierer abhängig von dem Vorzeichenbit die Ergebnisse der Bitshiftoperatoren aufsummiert oder subtrahiert. Das Vorzeichenbit charakterisiert, ob der jeweilige Multiplikand, insbesondere der Exponent, der diesem Multiplikanden zugeordnet ist, eine positive oder negative Zahl ist.
-
Weiterhin wird vorgeschlagen, dass die Recheneinheit einen ersten und zweiten Akkumulator umfasst. Dann, wenn das Konfigurationsbit charakterisiert, dass der erste Multiplikand im ersten Register hinterlegt ist, akkumuliert einer der Akkumulatoren nur das Ergebnis (B) des Addierers. Dann, wenn das Konfigurationsbit charakterisiert, dass die Exponenten des zweiten und dritten Multiplikanden im ersten Register hinterlegt sind, akkumuliert der erste Akkumulator das Ergebnis (A) des zweiten Bitshiftoperators und der zweite Akkumulator das Ergebnis (C) des ersten Bitshiftoperators.
-
Unter akkumulieren kann verstanden werden, dass mehrere Multiplikationen ausgeführt und die Ergebnisse der einzelnen Multiplikationen aufsummiert werden, z.B.: a ← a + (w * x).
-
Die Akkumulatoren können jeweils zwei Register und ein Akkumulationsregister und einen Addierer umfassen. In einem ersten Register ist eines der Ergebnisse A, B oder C hinterlegt. In dem zweiten Register ist das Vorzeichenbit des jeweiligen Exponenten hinterlegt, der dem zugehörigen Multiplikanden zugeordnet ist, welcher zum Ermitteln des Ergebnisses aus dem ersten Register verwendet wird. Der Addierer addiert oder subtrahiert den Inhalt des ersten Registers mit dem Akkumulationsregister abhängig von dem Vorzeichenbit aus dem zweiten Register und speichert das Ergebnis in dem Akkumulationsregister ab. Vorteilhaft ist hierbei, dass damit sehr effizient Vektor-Matrix-Multiplikationen durchgeführt werden können.
-
Weiterhin wird vorgeschlagen, dass der erste Akkumulator das Ergebnis (A) abhängig von demjenigen Vorzeichenbit aufsummiert oder subtrahiert, welches demjenigen Exponenten zugeordnet ist, welcher für den zweiten Bitshiftoperator verwendet wird und der zweite Akkumulator das Ergebnis (C) abhängig von demjenigen Vorzeichenbit aufsummiert oder subtrahiert, welches demjenigen Exponenten zugeordnet ist, welcher für den ersten Bitshiftoperator verwendet wird. Vorzugsweise sind die Vorzeichenbit ebenfalls im ersten Register hinterlegt.
-
Weiterhin wird vorgeschlagen, dass die Recheneinheit ferner eingerichtet ist, dass dann, wenn das Konfigurationsbit geändert wird, der erste und zweite Akkumulator zurückgesetzt (engl. reset) wird. Unter zurücksetzen kann verstanden werden, dass ein gespeicherter Wert, bzw. Inhalt des Akkumulators(-register) auf einen vorgebbaren initialen Wert, vorzugsweise auf den Wert null, gesetzt wird.
-
Weiterhin wird vorgeschlagen, dass die Basis der Multiplikanden des ersten und zweiten logarithmischen Zahlenformats dem Wert zwei entspricht. Die gesamte Wortbreite der beiden Exponenten des ersten Multiplikanden kann der gesamten Wortbreite der beiden Exponenten des ersten und zweiten Multiplikanden entsprechen, oder andersherum.
-
In einem zweiten Aspekt wird ein, insbesondere computerimplementiertes, Verfahren zum Betreiben der Recheneinheit nach dem ersten Aspekt vorgeschlagen. Das Verfahren umfasst die Schritte: Bereitstellen zweier Exponenten und eines Wertes x und eines Konfigurationsbits, wobei das Konfigurationsbit charakterisiert, ob die Exponenten genau einem Multiplikanden oder jeweils einem Multiplikanden zugeordnet sind. Daraufhin folgt ein Ausführen eines ersten Bitshifts des Wertes x um eine Anzahl der Stellen des ersten Exponenten und eines zweiten Bitshifts des Wertes x um die Anzahl der Stellen des zweiten Exponenten. Daraufhin folgt ein Ausgeben des Ergebnisses der Bitshiftoperatoren abhängig von dem Konfigurationsbit,
wobei dann, wenn das Konfigurationsbit charakterisiert, dass die beiden Exponenten einem Multiplikanden zugeordnet sind, werden die Ergebnisse der Bitshiftoperatoren addiert und als Ergebnis der Multiplikation ausgegeben, wobei dann, wenn das Konfigurationsbit charakterisiert, dass die beiden Exponenten jeweils einem Multiplikanden zugeordnet sind, werden die Ergebnisse der Bitshiftoperatoren jeweils als ein Ergebnis der Multiplikation des Wertes mit jeweils einem der Multiplikanden ausgegeben.
-
In einem weiteren Aspekt wird ein Computerprogramm vorgeschlagen. Das Computerprogramm ist eingerichtet, das Verfahren des zweiten Aspektes auszuführen. Das Computerprogramm umfasst Anweisungen, die einen Computer veranlassen, eines dieser genannten Verfahren mit all seinen Schritten auszuführen, wenn das Computerprogramm auf dem Computer abläuft. Ferner wird ein maschinenlesbares Speichermodul vorgeschlagen, auf welchem das Computerprogramm gespeichert ist.
-
Ausführungsbeispiele der oben genannten Aspekte sind in den beiliegenden Zeichnungen dargestellt und in der nachfolgenden Beschreibung näher erläutert. Dabei zeigen: Kurze Beschreibung der Zeichnungen
- 1 zwei schematisch Diagramme, die eine Verteilung von linear quantisierten und nicht-quantisierten Werten von Filtern einer Schicht eines neuronalen Netzes darstellen;
- 2 zwei schematische Diagramme, die eine Verteilung von unterschiedlich logarithmisch quantisierten und nicht-quantisierten Werten der Filter der Schicht des neuronalen Netzes darstellen;
- 3 eine schematische Darstellung eines Multiplizierers;
- 4 eine schematische Darstellung eines weiteren Multiplizierers;
- 5 eine Ausführungsform eines Verfahrens zur Multiplikation von unterschiedlich logarithmisch quantisierten Werten;
-
1 zeigt ein erstes schematisches Diagramm (1), welches eine Verteilung (10) von Werten eines Filters (conv3_3), insbesondere Gewichte, einer Schicht eines trainierten neuronalen Netzes zeigt. Die Verteilung (10) ist eine Häufigkeitsverteilung von quantisierten Werten in einer Float32-Zahlendarstellung. Es sei angemerkt, dass im ersten schematischen Diagramm (1) die Werte einer mono-modalen Verteilung folgen. Des Weiteren sind in dem ersten schematischen Diagramm (1) quantisierte Werte (11) mit einer Auflösung von 4 Bit dargestellt. Diese quantisierten Werte (11) mit der Auflösung von 4 Bit sind hierbei linear quantisiert und um den Wert 0 angeordnet.
-
Es wurde jedoch beobachtet, dass die Werte der Filter, insbesondere die Gewichte des neuronalen Netzes, einer nicht-uniformen Häufigkeitsverteilung (siehe zweites schematisches Diagramm (2)) folgen. Daher ist für niedrige Bitbreiten eine lineare Quantisierung nicht geeignet, um bestmöglich die Werte der Filter bei einer nicht-uniformen Verteilung zu quantisieren. Denn wie in dem zweiten schematischen Diagramm (2) dargestellt, kann mit einer linearen Quantisierung bei geringe Bitbreiten nur ein erster Mode (12a) sinnvoll quantisiert werden, wohingegen Werte der Filter entlang einem zweiten Mode (12b) bei einer linearen Quantisierung überhaupt nicht berücksichtigt werden. Dies kann zu einem hohen Quantisierungsfehler führen.
-
Im Folgenden wird vorgeschlagen, dass die Verteilungen (10,12a,12b), denen die Werte der Schichten des neuronalen Netzes folgen, mittels eines nicht-gleichverteilten Quantisierungsformats gehandhabt werden. Vorzugsweise wird eine logarithmische Zahlendarstellung zur Quantisierung verwendet. Unter einer logarithmischen Zahlendarstellung wird verstanden, dass statt des Wertes einer Zahl nur ein Wert eines Exponenten zu einer vorgegebenen Basis verwendet wird. Beispielsweise: der Wert 64 wird in der logarithmischen Zahlendarstellung als 26 = 64, folglich als Wert 6 abgespeichert.
-
Bevorzugt wird im Folgenden die Zahlendarstellung zur Basis 2 verwendet und als „Power-of-two“-Zahlenformat bezeichnet.
-
Werden Gewichte w bzw. Werte der Filter eines neuronalen Netzes als „power-of-two“ Wert 2
ŵ quantisiert, kann die Multiplikation von Aktivierungen x der jeweiligen Schicht, bzw. Neurons dieser Schicht mit den Gewichten durch einen Bitshift der Aktivierungen x um ŵ Stellen nach links erfolgen:
-
Im Folgenden werden die Exponenten mit einem ŵ dargestellt. Es sei angemerkt, dass der Wert x und der Exponent ŵ jeweils quantisiert sind und bevorzugt als binäre Zahl vorliegen.
-
Es wurde erkannt, dass die logarithmische Darstellung von Gewichten eines neuronalen Netzes nur bedingt geeignet ist, da insbesondere für den Fall einer Bimodalen-Verteilung für den zweiten Mode (vgl. zweites schematisches Diagramm (2)) nur wenige Abtastpunkte zur Verfügung stehen, siehe 2(b).
-
Es wird deshalb vorgeschlagen, ein Zahlenformat respektive eine Quantisierung zu verwenden, bei der die Gewichte w eines neuronalen Netzes durch zwei „power-of-two“ Werte dargestellt werden:
-
Das sich durch die beiden „power-of-two“ Werte nach Gleichung (2) ergebende Zahlenformat soll im Folgenden als „two-hot“ Zahlenformat bezeichnet werden.
-
Für eine Multiplikation ergibt sich im „two-hot“ Zahlenformat:
-
Die entsprechenden Quantisierungswerte durch das „power-of-two“ und das „two-hot“ Zahlenformat für das erste und zweite schematische Diagramm (1,2) ist in 2 beispielhaft dargestellt.
-
In 2 wird ersichtlich, dass das „two-hot“-Format für Bimodale-Verteilungen sinnvollere Abtastwerte (21) für den zweiten Mode bereitstellt.
-
Um in der „two-hot“ -Zahlenrepräsentation einen Freiheitsgrad zu integrieren, der für Hardware keinen Mehraufwand oder wesentliche Zusatzkosten hervorruft, kann der Parameter ζ eingefügt werden. Der Parameter ζ charakterisiert eine unterschiedliche Auflösung der beiden Werte w
1 und w
2:
3 zeigt schematisch eine Recheneinheit (
3) zur Multiplikation zumindest zweier Zahlen im „two-hot“-Zahlenformat.
-
Die Recheneinheit (3) umfasst in dieser Ausführungsform einen Multiplizierer (30) und optional einen Akkumulator (35).
-
Der Multiplizierer (30) erhält als Eingangswerte den Wert x, bzw. die Aktivierung x und das Gewicht im „two-hot“-Zahlenformat, also die Exponenten des Gewichtes ŵ1 und ŵ2. Ferner ist den Exponenten ŵ1 und ŵ2 jeweils ein Vorzeichenbit (engl. sign bit) s1, s2 zugeordnet. Die Exponenten ŵ1 und ŵ2 und bevorzugt die Vorzeichenbit sind in einem ersten Register (43) hinterlegt.
-
Vorzugsweise haben die Eingangswerte eine Auflösung von 8 Bit. Denkbar sind beliebig weitere Auflösungen, vorzugweise Auflösungen von 16 Bit oder weniger als 4 Bit.
-
Der Multiplizierer (30) berechnet dann abhängig von den Exponenten ŵ1 und ŵ2 und abhängig von der Aktivierung x gemäß Gleichung (4) durch Bitshiftoperatoren (31,32) das Ergebnis der Multiplikation. Für den Fall, dass der Parameter ζ gegeben ist, kann wie in Gleichung (4) das Ergebnis des Bitshiftoperators (31) mittels eines weiteren Bitshiftoperators (33) um die Anzahl der Stellen nach links verschoben werden, die durch den Parameter ζ beschrieben werden.
-
Abhängig von dem Vorzeichenbit s1 des ersten Exponenten ŵ1 wird dann das Ergebnis der beiden Bitshiftoperatoren (31,32) aufsummiert oder subtrahiert, vorzugsweise mittels eines Addierers (34), und als Zwischenergebnis p ausgegeben.
-
Für den Fall, dass die Aktivierung x mehrfach mit unterschiedlichen Gewichten w multipliziert und anschließend über alle Ergebnisse der einzelnen Multiplikation summiert werden sollen, kann der Akkumulator (35) verwendet werden. Sobald der Multiplizierer (30) das Zwischenergebnis (p) ermittelt hat, kann dieses durch den Akkumulator (35) weiterverarbeitet werden. Der Akkumulator (35) ermittelt hierbei abhängig von dem Zwischenergebnis p und dem Vorzeichenbit s2 des Exponenten ŵ2 und abhängig von dem gespeicherten Ergebnis des Akkumulatorregisters (acc_reg) ein Endergebnis q.
-
Vorzugsweise speichert der Akkumulator (35) das Zwischenergebnis p in einem Register (reg). Daraufhin wird aus einem weiteren Register (37) das Vorzeichenbit (sign_2) ausgelesen und mit einem Addierer (36) abhängig von dem Vorzeichenbit (sign_2) das Zwischenergebnis p des Registers (reg) und der Inhalt des Akkumulatorregisters (acc_reg) aufaddiert oder subtrahiert. Das Ergebnis des Addierers (36) wird daraufhin in dem Akkumulatorregister (acc_reg) gespeichert und optional als Ergebnis q ausgegeben.
-
4 zeigt eine schematische Darstellung einer weiteren Recheneinheit (4), welche vorteilhafterweise sowohl Multiplikationen in dem „two-hot“-Zahlenformat als auch in dem „power-of-two“-Zahlenformat ausführen kann.
-
Die Recheneinheit (4) kann durch ein Konfigurationsbit (40) in entweder einen ersten Modus versetzt werden, also Gewichte w gemäß dem „two-hot“-Zahlenformat, oder konfiguriert werden, in einem zweiten Modus zwei Gewichte im „power-of-two“- Zahlenformat zu verarbeiten.
-
Dabei wird im „two-hot“-Modus (erster Modus) das Ergebnis der beiden Bitshifts addiert (oder subtrahiert - abhängig von einem ersten Vorzeichenbit (sign_1)). Das Multiplikationsergebnis liegt am Ausgang B bereit und wird in einem ersten Akkumulator (35a) abhängig von einem zweiten Vorzeichenbit (sign_2) akkumuliert. Die Ausgabe eines zweiten Akkumulators (35b) ist 0 und/oder wird nicht verwendet. In diesem Modus ist die Auflösung der Zahlendarstellung für Gewichte höher als im zweiten Modus.
-
Ein Weiterleiten der Ergebnisse (am Ausgang A,B,C) des Multiplizierers (30) erfolgt durch Schalter (41,42). Diese Schalter leiten die Ergebnisse (am Ausgang A,B,C) des Multiplizierers (30) abhängig von dem Konfigurationsbit (40) zu den jeweiligen Akkumulatoren (35a,35b). Die Schalter können jeweils Multiplexer sein.
-
Alternativ kann für den ersten Modus das Konfigurationsbit (40) den zweiten Akkumulator (35b) deaktivieren oder die Ergebnisse am Ausgang A und C verwerfen.
-
Im „power-of-two“-Modus (zweiter Modus) werden zwei unterschiedliche Gewichte mit dem Eingangswert x parallel durch zwei Bitshifts multipliziert. Die beiden Multiplikationsergebnisse liegen an den Ausgängen A und C bereit.
-
Jedes Ergebnis wird abhängig vom entsprechenden Vorzeichenbit (sign_1,sign_2) auf das Akkumulator-Register des ersten und zweiten Akkumulators (35a,35b) addiert oder subtrahiert. Anschließend liegen zwei Ergebnisse an den beiden Akkumulatorausgängen bereit. In diesem Modus löst das Zahlenformat die Gewichte gröber auf. Im Gegenzug erreicht die Recheneinheit (4) den doppelten Rechendurchsatz.
-
Vorzugsweise werden im „power-of-two“-Modus (zweiter Modus) die Ergebnisse des ersten und zweiten Akkumulators (35a,35b) mittels eines weiteren Addierers aufaddiert, der nicht in 4 gezeigt ist. Dies wird vorzugsweise dann durchgeführt, wenn alle Ergebnisse in den Akkumulatoren berechnet wurden und eine Summe über alle Multiplikationsergebnisse ausgegeben werden soll.
-
5 zeigt schematisch ein Flussdiagramm (5) zum Betreiben der Recheneinheit (4), insbesondere zur Multiplikation eines Wertes x mit einem Multiplikand im „two-hot“-Zahlenformat oder zur Multiplikation eines Wertes x mit 2 Multiplikanden im „power-of-two“- Zahlenformat.
-
Im ersten Schritt 500 wird der Werte x, die Exponenten des Multiplikanden im „two-hot“-Zahlenformat oder die Exponenten der zwei Multiplikanden im „power-of-two“-Zahlenformat bereitgestellt. Zusätzlich kann ein Konfigurationsbit gesetzt werden, welches charakterisiert, ob die zwei Exponenten dem einen Multiplikanden im „two-hot“-Zahlenformat zugeordnet sind, oder den zwei Multiplikanden im „power-of-two“-Zahlenformat.
-
In Schritt 500 wird dann entweder abhängig von dem Konfigurationsbit oder abhängig davon, in welchem Zahlenformat die Multiplikanden vorliegen, entschieden, ob die Multiplikation gemäß dem ersten Modus oder dem zweiten Modus ausgeführt wird.
-
Dann, wenn entschieden wurde, dass die Multiplikation gemäß dem ersten Modus ausgeführt wird, wird nach Schritt 500 der Schritt 510a ausgeführt. Dann, wenn in Schritt 500 entschieden wurde, dass die Multiplikation gemäß dem zweiten Modus ausgeführt werden soll, folgt Schritt 510b.
-
Im Schritt 510a werden die Exponenten des einen Multiplikanden im „two-hot“-Zahlenformat gemäß Gleichung (3) verwendet: mittels Bitshiftoperatoren und Addition wird das Ergebnis der Multiplikation ermittelt.
-
Nachdem Schritt 510a beendet wurde, folgt Schritt 520a. Hierbei wird das Ergebnis des Schrittes 510a ausgegeben. Zusätzlich oder alternativ kann in Schritt 520a über Ergebnisse des Schrittes 510a akkumuliert werden.
-
Im Schritt 510b werden die Exponenten der zwei Multiplikanden im „power-of-two“-Zahlenformat verwendet, um den Wert x jeweils um die Anzahl der Stellen der Exponenten nach links mittels Verschiebungsoperationen zu verschieben, beispielsweise mittels zwei Bitshiftoperatoren: x ≪ ŵ1 und x ≪ ŵ2.
-
Nachdem Schritt 510b beendet wurde, folgt Schritt 520b. Hierbei werden die Ergebnisse der jeweiligen Verschiebungsoperationen des Schrittes 510b separat voneinander ausgegeben. Zusätzlich oder alternativ kann in Schritt 520b jeweils über beide Ergebnisse des Schrittes 510b separat akkumuliert werden.