Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

3.4.5 nonstandard_arithmetic(3m)

Chapter 2, IEEE 演算で説明されているように、IEEE 演算ではアンダーフローした結果を、段階的アンダーフローを使用して処理します。 SPARC ベースの一部のシステムでは、段階的アンダーフローは多くの場合、演算のソフトウェアエミュレーションを部分的に使用して実装されます。 多くの計算がアンダーフローすると、これによってパフォーマンスが低下する場合があります。

特定のプログラムがこれに該当するかどうかについての何らかの情報を取得するには、ieee_retrospective または ieee_flags を使用してアンダーフロー例外が発生したかどうかを判定し、さらにプログラムによって使用されているシステム時間数をチェックできます。プログラムがオペレーティングシステムで異常に多い時間を費やし、アンダーフロー例外を発生させている場合は、段階的アンダーフローが原因である可能性があります。この場合は、IEEE 以外の演算を使用すると、プログラムの実行が速くなる可能性があります。

関数 nonstandard_arithmetic は、IEEE 以外の演算モードをサポートしているプロセッサ上で、これらの演算モードを有効にします。SPARC システムでは、この関数は、浮動小数点ステータスレジスタ内の NS (非標準の演算) ビットを設定します。SSE 命令をサポートしている x86 システムでは、この関数は、MXCSR レジスタ内の FTZ (0 へのフラッシュ) ビットを設定します。また、DAZ (非正規数が 0) ビットをサポートしているプロセッサ上の MXCSR レジスタ内のこのビットも設定します。非標準モードの影響はプロセッサによって異なり、通常は堅牢なソフトウェアの誤動作を引き起こす場合もあることに注意してください。非標準モードは、通常の使用にはお勧めできません。

関数 standard_arithmetic は、デフォルトの IEEE 演算を使用するようにハードウェアをリセットします。どちらの関数も、デフォルトの IEEE 754 の演算方法のみを提供するプロセッサには影響を与えません。このようなプロセッサの 1 つに SPARC T4 があります。