STM32F4 - Fließkommaeinheit ( FPU )

Ich würde gerne wissen, was der Zweck der speziellen FPU-Einheit ist, die mit STM32F4-Mikrocontrollern beworben wird?

Um diese Website zu zitieren :

" Der Cortex-M4-Kern verfügt über eine Fließkommaeinheit (FPU) mit einfacher Genauigkeit, die alle ARM-Datenverarbeitungsanweisungen und Datentypen mit einfacher Genauigkeit unterstützt. "

Was wäre der Unterschied, wenn diese Einheit nicht in der Architektur vorhanden wäre? Bedeutet dies, dass ich einige spezielle Bibliotheken / Funktionen verwenden muss, wenn ich Arithmetik mit Gleitkommavariablen mache? Danke schön.

Antworten (3)

Ja, wenn Sie keine Hardware-Gleitkommaeinheit haben, müssen Gleitkommaoperationen mit Bibliotheksfunktionen durchgeführt werden. Dies geschieht mit typischen Cortex-M3-Prozessoren, die keine Hardware-Gleitkommaunterstützung haben, und die Ausführungszeit für diese Operationen verlängert sich erheblich.

Das ist der Schlüssel, die Leistung steigt, wenn es eine Hardwareeinheit gibt, die Gleitkommazahlen verarbeitet, anstatt nur eine Softwareimplementierung.
Danke schön. Um FPU auf STM32F4 zu verwenden, muss ich also keinen speziellen Code schreiben, ich schreibe nur arithmetische Operationen im üblichen C-Stil mit Gleitkommavariablen?
Ja, vorausgesetzt, Ihr Compiler weiß, dass Sie einen Cortex-M4 mit einer FPU programmieren.
@JoeHass Joe, ist das 1000:1 oder 100:1 von einem offiziellen Benchmark oder einer Schätzung? Die Zahlen, die ich gesehen habe, sind bei weitem nicht so hoch (eher etwa 10:1).
Es stammt aus meiner eigenen Beobachtung, an einer sehr kleinen Stichprobe, also bin ich bereit zuzugeben, dass ich möglicherweise pathologische Fälle gesehen habe. Ich werde die Antwort bearbeiten.
Nicht ganz. Ohne eine FPU müssen Gleitkommaoperationen in Software durchgeführt werden. Diese Software muss nicht aus einer Bibliothek stammen.

Wenn Sie einfache Float-Operationen mit einfacher Genauigkeit ausführen müssen, kann die FPU (vorausgesetzt, Ihr Compiler unterstützt dies und Sie konfigurieren sie richtig) diese Operationen um mindestens eine Größenordnung beschleunigen.

Denken Sie daran, dass der SPFPU keine Hilfe ist, wenn Sie doppelte Genauigkeit benötigen. In der Praxis reichen 24 Bit Mantisse (32-Bit-Float) für viele reale Anwendungen (Präzisionsdatenerfassung und -filterung, Navigation, High-End-Audio) nicht ganz aus, während ein doppelter oder oft sogar ein 32-Bit-Festpunkt ausreicht .

Ich bin mir nicht sicher, ob es SP-Transzendentale beschleunigt oder nicht, ich würde gerne einige Benchmarks sehen.

Der 32-Bit-ARM ist bei Fließkommazahlen in Software ziemlich effizient. Der Befehlssatz ermöglicht es, dass jeder Befehl eine rechte oder linke Barrel-Verschiebung beliebiger Länge in einem Zyklus enthält. Der Geschwindigkeitsgewinn von der FP-Hardware liegt eher bei 5 bis 50, je nach Operation und wie Dinge wie Triggerfunktionen gehandhabt werden. Die Festkomma-DSP-Hardware im F4 kann die DSP-Geschwindigkeit um das 2- bis 4-fache verbessern. Das hört sich nicht nach viel an, aber es ist der Unterschied zwischen der Aktualisierung der Motorgeschwindigkeit 16 mal pro Sekunde gegenüber 4. Es hat unter anderem einen MAC (Multiplikator-Akkumulator), der 32x32 + 64 -> 64-Bit-Akkumulator macht, und einiges mehr Prozesse, die ein Paar von 16- bis 32-Bit-MACs ausführen. Der MAC ist die Hauptstütze des DSP.

Es gibt auch einen analogen Zufallszahlengenerator und 3 12-Bit-ADCs, die 7,2 MHz verarbeiten können (ich gehe von einem Discovery-Board aus). Ich vermute, dass wir viele davon in "-uino"-Variationen sehen werden.

Re: Geschwindigkeitsvorteil, ich habe damals eine große Analyse gemacht. Es war 1 MHz 65C02 gegenüber dem gleichen mit einer hinzugefügten ADM9511-FPU. Ein paar Dinge in den Transzendentalen waren 1000-mal schneller, aber viele waren nur im Bereich von 10 bis 50. Als Inspiration für ARM ist es nicht verwunderlich, dass 6502 ziemlich effizient war. Wozniak hat das gesamte Apple II FP-System in 256 Bytes geschrieben. Zahlen wie 100 bis 1000X waren gut für einige andere 8-Bit-8080/Z80. AVR in Arduino hat einige nette Tricks für den Befehlssatz, die es der 8080-Menge der alten Tage weit voraus machen.