Forum: Mikrocontroller und Digitale Elektronik Wozu FPU nicht nutzen? (stm32)


von Sina A. (sinapse)


Lesenswert?

Hallo,

wenn man einen uC mit FPU hat, kann man die FPU nicht nutzen, indem man 
dem compiler sagt er solle doch bitte keine FPU Befehle verwenden.  Gibt 
es einen Fall, wann das jemals sinnvoll sein könnte?

von Mr.Moe (Gast)


Lesenswert?

Ich bin mir nicht sicher, ob sie 'abschaltbar' ist. Die Komponenten im 
STM, die man braucht müssen zuvor 'eingeschaltet' werden.
Falls das mit der FPU ebenfalls so ist wäre Stromsparen ein Argument...

von iizi (Gast)


Lesenswert?

sina anargo schrieb:
> Hallo,
>
> wenn man einen uC mit FPU hat, kann man die FPU nicht nutzen, indem man
> dem compiler sagt er solle doch bitte keine FPU Befehle verwenden.  Gibt
> es einen Fall, wann das jemals sinnvoll sein könnte?

Verwendung von einem RTOS, welches die FPU-Register beim Kontextwechsel 
nicht sichert


@ Mr.Moe: muss gar nicht hardwareseitig abschaltbar sein. Wenn der 
Compiler einfach die FPU-Instruktions nicht verwendet ;)

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hi Sinapse,
schau Dir mal die AN4044 zur FPU im STM32F4 an.
Das Teil ist spezialisiert auf 32bit-Float-Arithmetik.
Dem GCC musst Du dediziert mitteilen, dass Du in diesem Bereich arbeiten 
möchtest:
- Variablen als float deklarieren
- bei Funktionsaufrufen die f-Variante verwenden (e.g. asinf statt asin)

Mein letzter Stand ist: sobald Du double deklarierst, wird die FPU 
überhaupt nicht verwendet.

Bei Tests mit dem GCC 4.6 mit FPU sind float-Aufgaben grob doppelt so 
schnell gelöst worden.

Grüße,
 Marcus

von Axel S. (a-za-z0-9)


Lesenswert?

iizi schrieb:
> @ Mr.Moe: muss gar nicht hardwareseitig abschaltbar sein. Wenn der
> Compiler einfach die FPU-Instruktions nicht verwendet ;)

Ich nehme an wenn man Strom sparen will, wird man sie schon explizit 
abschalten müssen.

Marcus H. schrieb:
[schnipp]

Toll, wie du so gar nicht auf die Frage eingehst.

@sinapse: mir fällt auch nur Stromsparen ein. Allerdings kann man dann 
auch gleich einen Core ohne FPU nehmen.


XL

von Gaestchen (Gast)


Lesenswert?

sina anargo schrieb:
> Gibt es einen Fall, wann das jemals sinnvoll sein könnte?

Bugs in der FPU, defekte FPU, oder zum testen

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Ach Axel, verzeih, war ein langer Tag. Vielleicht habe ich die Frage 
falsch verstanden.
Ich habe Gründe angegeben, warum es Sinn machen könnte die FPU nicht zu 
verwenden. gähn

Zum Thema Strom sparen: wenn die CPU die meiste Zeit schläft, die FPU 
25% des CPU Stroms braucht und doppelt so schnell wie die CPU ist, 
könnte es sich sogar lohnen, die FPU zu nehmen um früher wieder ins Bett 
zu kommen.
Und beim oben zitierten STM32F4 muss man die FPU nach dem Reset 
dediziert wecken.
gute Nacht

von Axel S. (a-za-z0-9)


Lesenswert?

Marcus H. schrieb:
> Ach Axel, verzeih, war ein langer Tag. Vielleicht habe ich die Frage
> falsch verstanden.

Offensichtlich. Zugegeben, die Frage ist auch eher merkwürdig. Aber das 
ist wiederum kein Grund, mit der Antwort auf eine ganz andere Frage 
darauf zu antworten.

> Ich habe Gründe angegeben, warum es Sinn machen könnte die FPU nicht zu
> verwenden.

Nein. Du hast ausgeführt wie man es anstellen muß um die FPU zu 
verwenden. Und ein paar Fälle aufgeführt, wo die FPU auch dann nicht 
verwendet wird wenn sie vorhanden ist. Keines davon war gefragt.

> Zum Thema Strom sparen: wenn die CPU die meiste Zeit schläft, die FPU
> 25% des CPU Stroms braucht und doppelt so schnell wie die CPU ist,
> könnte es sich sogar lohnen, die FPU zu nehmen um früher wieder ins Bett
> zu kommen.

Auch das war nicht die Frage.

> Und beim oben zitierten STM32F4 muss man die FPU nach dem Reset
> dediziert wecken.

Das würde ja darauf hindeuten, daß es da ein Stromsparpotential gibt, 
wenn man die FPU absichtlich nicht aufweckt.


XL

von greg (Gast)


Lesenswert?

Die FPU ist beim Cortex-M3 und anderen Cores optional. Daher hat der 
Compiler Schalter, um die Nutzung der FPU zu konfigurieren. Man schaltet 
die FPU i.d.R. daher nicht aus, sondern überhaupt erst ein.

AFAIR verändert es die Calling Convention, wenn man die FPU aktiviert. 
Vielleicht man hat irgendwelche Binärblobs aus dritter Hand, die die 
Calling Convention ohne FPU verlangen. Das ist aber auch so ziemlich das 
Einzige, was mir einfällt.

von Sina A. (sinapse)


Lesenswert?

ja... das ganze zielte darauf ab, warum überhaupt die FPU im Compiler 
aktiviert/deaktiviert werden kann. Dachte im deaktivierten Zustand kann 
es doch noch Vorteile geben, die mir nur nicht einfallen.

Aber:

greg schrieb:
> Man schaltet
> die FPU i.d.R. daher nicht aus, sondern überhaupt erst ein.

das wird es wohl sein.

Danke und lg

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hi Sinapse,
dann war ich vielleicht doch nicht so weit daneben.

Mögliche Gründe auf die FPU zu verzichten:
1. Leistungsaufnahme
2. Kontextwechselaufwand (Speicher, Latenzzeit)
3. ggf. bessere Genauigkeit bei Firmwareemulation (double statt float 
bei STM32F4)

Gründe 2/3 sind ausschlaggebend, warum ich in meinen STM32F4 Designs 
meist die FPU schlafen lasse.
Der Geschwindigkeitsfaktor 2 kommt höchstens bei schnellen Filtern zum 
Zug.

Grüße,
 Marcus

von m.n. (Gast)


Lesenswert?

Marcus H. schrieb:
> Der Geschwindigkeitsfaktor 2 kommt höchstens bei schnellen Filtern zum
> Zug.

Den Faktor 2 hast Du Dir mal eben so einfallen lassen?
Nach meiner Erfahrung ist dieser Faktor deutlich höher.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Nö Gast, ich zitiere mal eben meinen Lieblingsautor aus Post #3823345:
"Bei Tests mit dem GCC 4.6 mit FPU sind float-Aufgaben grob doppelt so
schnell gelöst worden."

Der Test war eine gemischte Folge von Arithmetik, Trigonometrie und 
dergl..

Ansonsten habe ich auch schon die AN4044 genannt. Da kannst Du die 
(tatsächlich recht kurzen) Laufzeiten für die einzelnen FPU-Befehle 
raussuchen.

von (prx) A. K. (prx)


Lesenswert?

Der fundamentale Vorteil dieses Schalters erschliesst sich sofort, wenn 
man zu den Entwicklern des Compilers und/oder der entsprechenden 
Runtime-Library gehört und den Code ohne FPU auf einem Prozessor mit FPU 
testen will.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Marcus H. schrieb:
> Nö Gast, ich zitiere mal eben meinen Lieblingsautor aus Post #3823345:
> "Bei Tests mit dem GCC 4.6 mit FPU sind float-Aufgaben grob doppelt so
> schnell gelöst worden."

Hier zitierst Du Dich selber? Ist das jetzt besonders witzig?

Marcus H. schrieb:
> Ansonsten habe ich auch schon die AN4044 genannt.

Da steht unter 4.4, dass die Testroutinen mit FPU Faktor 11,5 - 17 
schneller laufen.

Beitrag "Re: Controller mit FPU"

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.