如何避免非规范化数字?

信息处理 浮点
2022-01-19 00:57:45

我在上一个问题中提到的同一个浮点 AMD X86-64 数字信号处理系统存在一个问题,即当信号达到非常接近(但不完全)零的值时,它有时会显着减慢。

问题是非规范化浮点值需要 CPU 进行特殊处理,这比处理普通浮点值要慢得多。这可能会导致 DSP 系统运行速度过慢——花费的时间比1/fs计算需要在一个周期内计算的所有内容。

一种解决方法是为所有数字添加一个小的偏移量,以强制它们进入正常数字的范围。有没有办法直接指示 FPU 根本不生成非正规数?

操作系统是 Linux,编译器是gcc.

编辑:另外,禁用非正规数的数字后果是什么?

1个回答

您可以通过在MXCSR寄存器中设置“刷新为零”和“非正规数为零”位 (15,6) 来强制非正规数为零。

_mm_setcsr( _mm_getcsr() | (1<<15) | (1<<6));