float16_t für AVR?

#6831673
Nie gesehen, sorry.

Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit 
nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den 
man auch leicht mit ganzen Zahlen erreicht.

Das soll wohl gelegentlich im Grafikbereich verwendet werden, aber da 
kommt man mit einem AVR auch nicht weit.

Sicher, daß Festkommazahlen nicht interessanter sind?
Gast #6831674
Zu float16_t kann ich nichts schreiben. Für entsprechende Anwendungen 
verwende ich auf den AVRs Fixed-Points.

Auszug:
1
#include <avr/io.h>
2
#include <math.h>
3
#include <stdint-gcc.h>
4
#include <stdfix.h>
5

6
...
7

8
#define samples 64
9

10
...
11

12
_Fract v[samples];
13

14
...
Gast #6831768
Klaus W. schrieb:
> Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit
> nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den
> man auch leicht mit ganzen Zahlen erreicht.

Der TO interessiert sich ja auch nur dafür. Von irgend einer sinnvollen 
Anwendung stand da nichts.

Abgesehen davon: Float-Formate aller Art haben in Verbindung mit dem 
Wunsch nach einer Art MAC-Operation eigentlich nur einen Sinn, wenn sie 
in Hardware und dabei effektiv nur in einem Takt berechenbar sind. So 
etwas ist definitiv bei einem AVR nicht der Fall.

W.S.
Gast #6831922
Klaus W. schrieb:
> Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit
> nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den
> man auch leicht mit ganzen Zahlen erreicht.

Bei float hast du immer die gleiche Anzahl gültiger Stellen, bei ganzen 
Zahlen nicht. Für Rechenoperationen mit Multiplikationen daher sehr gut 
vorstellbar.
#6831972
Wolfgang schrieb:
> Bei float hast du immer die gleiche Anzahl gültiger Stellen, bei ganzen
> Zahlen nicht. Für Rechenoperationen mit Multiplikationen daher sehr gut
> vorstellbar.

Das ist mir schon klar.
In der Theorie ein echter Vorteil. Bei float16_t ist aber (wenn ich mich 
nicht täusche) der Exponent 5 Bits lang. Dann kommt man von 
Zehntausendstel bis gerade mal um die 65000 als Wertebereich. Das kann 
man mit Festkomma auch leicht haben, und hat viel weniger Rechenaufwand, 
gerade bei einem AVR sucht man eher keine Rechenzeitfresser.

Gleitkomma lohnt doch erst, wenn man wirklich einen größeren Bereich 
braucht und sich dabei nur eine begrenzte Anzahl Stellen für die 
Genauigkeit gönnen will.

W.S. schrieb:
> Der TO interessiert sich ja auch nur dafür. Von irgend einer sinnvollen
> Anwendung stand da nichts.

Stimmt, Spielen reicht als Motivation. Dagegen sage ich nichts.
Wollte nur erwähnen, daß der praktische Nutzen wahrscheinlich limitiert 
ist.
#6832017
Der Tradeoff liegt zwischen Anzahl Stellen, und Wertebereich. Nehmen 
wird 2 Stellen, sind das 7 bit mantisse plus vorzeichen, also 8 bit. 
Dann waeren 8 Bit uebrig fuer den Exponenten, auch 7 bit plus 
Vorzeichen. Also bis 128 nach links oder rechts schieben. Das ist doch 
sehr ueppig.
Weniger Werteberich waere auch passend. Nehmen wir 30 Shifts nach rechts 
und links, da wuerden 5 bits Exponent reichen, und wuerden 10 Bit 
Mantisse lassen. Das waeren dann 3 Stellen.
Gast #6832162
Wenn Du es Dir einfach, aber dafür nicht ganz so schnell machen willst: 
Nimm bfloat16, das ist der normale float mit verkürzter Mantisse. Du 
speicherst einfach die unteren zwei Byte der Mantisse nicht. Beim laden 
"bläst" Du das auf und nimmst dann die float-Operationen .
Gast #6832563
Klaus W.
>Hier sind welche erwähnt:
>https://stackoverflow.com/questions/5766882/why-is-there-no-2-byte-float-and-does-an-implementation-already-exist
>Vielleicht ein Startpunkt?

Danke für den interessanten Link. Erstaunlich, wie aufwendig die 
Multiplikation und die Addition realisiert ist (ganz am Schluss im 
Code). Schnell sieht das nicht aus.

float16_t nennt sich wohl auch "half precision float":
https://en.wikipedia.org/wiki/Half-precision_floating-point_format#IEEE_754_half-precision_binary_floating-point_format:_binary16

Das Format findet sich vielfach in der CMSIS-DSP:
https://www.keil.com/pack/doc/CMSIS/DSP/html/group__FIR.html#ga9b5e4d748609deea033ce74fade70f78

Ich nehme mal an, es gibt einige ARMs, die das Format in ihren 
Recheneinheiten unterstützen.
Angehängte Dateien:
#6832577
chris_ schrieb:
> Ich nehme mal an, es gibt einige ARMs, die das Format in ihren
> Recheneinheiten unterstützen.

Ich erinnere mich daran gelesen zu haben, dass dem nicht so und dass der 
Nutzen von half precision float deswegen sehr begrenzt sei. Ich kenne 
die Quelle nicht mehr. Wahrscheinlich war es eines der Bücher von Joseph 
Yiu.
#6832581
Klaus W. schrieb:
> Dann kommt man von Zehntausendstel bis gerade mal um die 65000 als
> Wertebereich. Das kann man mit Festkomma auch leicht haben,

Allerdings nicht mit nur 16 Bit.

> und hat viel weniger Rechenaufwand, gerade bei einem AVR sucht man eher
> keine Rechenzeitfresser.

Man sucht aber auch keine Speicherfresser.
Gast #6832665
Peter D. schrieb:
> Klaus W. schrieb:
>> Wollte nur erwähnen, daß der praktische Nutzen wahrscheinlich limitiert
>> ist.
>
> Wie schon gesagt wurde, Bildverarbeitung z.B. auf einem FPGA. Ansonsten
> ist das Quatsch, insbesondere auf einem AVR.

Es wird wohl hauptsächlich für neuronale Netze eingesetzt. Direkte 
Hardwareunterstützung gibts es meines Wissens nur in neueren GPUs, dort 
dann aber mit bis zu 400 TFlop/s (NVidia A100), und einigen FPGAs (z.B. 
Intel Arria 10). X86 können nicht direkt damit rechnen aber es gibt 
Assemblerbefehle um Half-Floats als Speicherformat zu verwenden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.