Forum: Digitale Signalverarbeitung / DSP / Machine Learning Pseudofloat und pseudo-schwach besetzte Matritzen


von Stefan H. (Firma: dm2sh) (stefan_helmert)


Lesenswert?

Hallo,

die Tatsache, dass Float-Operationen etwas aufwendig sind, suggeriert 
doch, dass es sinnvoll sein könnte Rechner zu bauen, die Pseudofloat 
unterstützen. Dabei wird der Exponent nicht bei jeder Operation 
angepasst oder beachtet. Die Mantisse bewegt sich zwischen 0 und 1 statt 
1 und 2. Entsprechende Maschinenbefehle sind zur Exponentenkorrektur 
vorhanden.

Um die Beachtung des Exponenten bei Additionen wegzuoptimieren, können 
Registerbänke/Vektoren mit gemeinsamen Exponenten versehen werden. 
Multiplikationen bewerten die Mantisse als Ganzzahl. Das Ergebnis ist 
von doppelter Bitbreite (MUL-/DIV-Ergebnisregister) und der Exponent 
wird einfach durch Addition berechnet. Bei geeigneter Vorausrichtung 
können mehrere Multiplikationen aufeinander folgen und die 
Exponentenanpassung am Ende erfolgen.

Für die Darstellung von Matrizen werden nur die Mantissen als Elemente 
der Matrix gespeichert. Es wird jeweils ein Exponent je Spalte und ein 
Exponent je Zeile verwendet. Das wäre evtl. ein Kompromiss zwischen 
Weglassen kleiner Werte (schwache Besetzung) und vollständiger 
Float-Speicherung. Diese verlustbehaftete Speicherung (Genauigkeit) 
bringt zwar auf dem ersten Blick einen Effizienzgewinn, erschwert jedoch 
den Einsatz effizienter Matrixmultiplikationsalgorithmen (z. B. 
Strassen) mit geringerer numerischer Stabilität.

Welche Ansätze gibt es in diese Richtung? Existieren Pseudo-Float 
DSP/Vektor-/Matrix-Rechner? (Beispiele?) Was existiert an Software, 
wissenschaftlichen Veröffentlichungen oder Diskussionen dazu?

von Mark B. (markbrandis)


Lesenswert?

Insbesondere digitale Signalprozessoren kennen das Q-Format:

https://en.wikipedia.org/wiki/Q_(number_format)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Stefan H. schrieb:
> Um die Beachtung des Exponenten bei Additionen wegzuoptimieren, können
> Registerbänke/Vektoren mit gemeinsamen Exponenten versehen werden.

Das wird so z.B. bei manchen Audio-DSPs in Hoergeraeten gemacht (Block 
Floating Point), oder auch bei der Quantisierung von Radardaten (Block 
Adaptive Quantization). Fuer die meisten praktischen Anwendungen ist das 
allerdings zu viel Gebastel, lieber spendiert man gleich ein paar Bits 
mehr oder verwendet gleich eine FPU.

: Bearbeitet durch Admin
von Michael W. (Gast)


Lesenswert?

Kriegen denn die Compiler das nicht hin, das zu automatisieren?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.