前の質問で述べたのと同じ浮動小数点AMD X86-64デジタル信号処理システムには、信号がゼロに非常に近い(正確ではない)値になると、速度が大幅に低下することがあるという問題があります。
問題は、非正規化された浮動小数点値が、通常の浮動小数点値を処理するよりも劇的に遅いCPUによる特別な処理を必要とすることです。これにより、DSPシステムの動作が非常に遅くなる可能性があります。 1サイクルで計算する必要があるすべてのものを計算します。
回避策は、すべての数値に小さなオフセットを追加して、それらを通常の数値の範囲に強制することです。そもそもFPUに非正規数を生成しないように指示する方法はありますか?
OSはLinux、コンパイラはgcc
です。
編集:また、非正規数を無効にすると、数値的にどのような影響がありますか?
x87 FPU命令、MMX、SSE、AVX、その他すべてを使用していますか?
—
Jason R
FPUだけだと思います。倍精度。ほとんどの場合、数学はCに直接実装されており、Cコンパイラ(gcc)は計算を行います。数学ライブラリの代わりに、いくつかの小さなインラインアセンブリ関数を使用して
—
。– nibot
sincos
、などを取得します