El mismo sistema de procesamiento de señal digital AMD X86-64 de punto flotante mencionado en mi pregunta anterior tiene un problema en el que a veces se ralentiza sustancialmente cuando las señales alcanzan valores muy cercanos (pero no exactamente) cero.
El problema es que los valores de punto flotante desnormalizados requieren un procesamiento especial por parte de la CPU, que es dramáticamente más lento que tratar con valores normales de punto flotante. Esto puede hacer que el sistema DSP funcione demasiado lento, ya que lleva más de calcular todo lo que debe calcularse en un ciclo.
Una solución alternativa es agregar un pequeño desplazamiento a todos los números para forzarlos al rango de números normales. ¿Hay alguna manera de instruir a la FPU para que simplemente no genere números denormales en primer lugar?
El sistema operativo es Linux y el compilador es gcc
.
EDITAR: Además, ¿cuáles son las consecuencias numéricas de deshabilitar los números denormales?
fuente
sincos
, etcRespuestas:
Puede forzar los números denormales a cero estableciendo los bits "flush a zero" y "denormals are zero" (15,6) en el registro MXCSR .
fuente