STM32F4 - Unidad de punto flotante (FPU)

Me gustaría saber, ¿cuál es el propósito de la unidad FPU especial, que se anuncia con microcontroladores STM32F4?

Para citar este sitio web :

" El núcleo Cortex-M4 presenta una unidad de punto flotante (FPU) de precisión simple que admite todas las instrucciones de procesamiento de datos y tipos de datos de precisión simple ARM. "

¿Cuál sería la diferencia, si esta unidad no estuviera presente en la arquitectura? ¿Significa esto que necesito usar algunas bibliotecas/funciones especiales cuando hago aritmética con variables de punto flotante? Gracias.

Respuestas (3)

Sí, si no tiene una unidad de punto flotante de hardware, las operaciones de punto flotante deben realizarse mediante funciones de biblioteca. Eso es lo que se hace con los típicos procesadores Cortex-M3 que no tienen soporte de punto flotante de hardware, y el tiempo de ejecución de estas operaciones aumenta significativamente.

Esa es la clave, el rendimiento aumenta cuando hay una unidad de hardware que procesa puntos flotantes en lugar de solo una implementación de software.
Gracias. Entonces, para usar FPU en STM32F4, no necesito escribir ningún código especial, solo escribo operaciones aritméticas en un estilo C habitual, usando variables de coma flotante.
Sí, suponiendo que su compilador sepa que está programando un Cortex-M4 con una FPU.
@JoeHass Joe, ¿es 1000: 1 o 100: 1 de un punto de referencia oficial o una estimación? Los números que he visto no están ni cerca de ser tan altos (más bien ~10:1).
Es a partir de mi propia observación, en una muestra muy pequeña, por lo que estoy dispuesto a admitir que es posible que haya visto casos patológicos. Editaré la respuesta.
No exactamente. Sin una FPU, las operaciones de punto flotante deben realizarse en software. Este software no tiene que provenir de una biblioteca.

Si necesita realizar operaciones flotantes simples de precisión simple, la FPU (suponiendo que su compilador lo admita y lo configure correctamente) puede acelerar esas operaciones al menos en un orden de magnitud.

Tenga en cuenta que si necesita doble precisión, el SPFPU no es de ayuda. En la práctica, 24 bits de mantisa (flotante de 32 bits) no son suficientes para muchas aplicaciones reales (adquisición y filtrado de datos de precisión, navegación, audio de alta gama), mientras que un punto fijo doble o, a menudo, incluso de 32 bits es suficiente. .

No estoy seguro de si acelera los trascendentales de SP o no, me gustaría ver algunos puntos de referencia.

El ARM de 32 bits es bastante eficiente en punto flotante en el software. El conjunto de instrucciones permite que cualquier instrucción incluya un cambio de barril derecho o izquierdo de longitud arbitraria en 1 ciclo. La ganancia de velocidad del hardware FP es más como 5 a 50 dependiendo de la operación y cómo se manejan cosas como las funciones trigonométricas. El hardware DSP de punto fijo en el F4 puede mejorar la velocidad DSP de 2 a 4 veces. Eso no parece mucho, pero es la diferencia entre actualizar la velocidad del motor 16 veces por segundo versus 4. Tiene, entre otras cosas, un MAC (multiplicador-acumulador) que hace 32x32 + 64 --> Acumulador de 64 bits, y algunos procesos que harán un par de MAC de 16 a 32 bits. El MAC es el pilar de DSP.

También hay un generador de números aleatorios analógico y 3 ADC de 12 bits que pueden manejar 7,2 MHz (supongo que es una placa Discovery). Supongo que veremos muchos de estos en variaciones "-uino".

Re: Ventaja de velocidad, hice un gran análisis hace mucho tiempo. Era 1 MHz 65C02 frente a lo mismo con una FPU ADM9511 añadida. Algunas cosas en los trascendentales fueron 1000 veces más rápidas, pero muchas estaban solo en el rango de 10 a 50. Como inspiración para ARM, no sorprende que 6502 fuera bastante eficiente. Wozniak escribió todo el sistema Apple II FP en 256 bytes. Números como 100 a 1000X eran buenos para otros 8080/Z80 de 8 bits. AVR en Arduino tiene algunos buenos trucos para el conjunto de instrucciones que lo colocan muy por delante de la multitud 8080 de los viejos tiempos.