インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド

FTZ フラグと DAZ フラグの設定

インテル® プロセッサーでは、浮動小数点計算の制御に、MXCSR レジスターの FTZ (Flush-to-Zero) と DAZ (denormals are zeros) フラグが使用されます。 インテル® SSE 命令およびインテル® AVX 命令 (スカラーおよびベクトル命令を含む) は、FTZ および DAZ フラグをそれぞれ有効にすることにより、その恩恵が得られます。これらのインテル® SSE 命令およびインテル® AVX を使用する浮動小数点演算は、FTZ/DAZ フラグが有効な場合に高速になり、アプリケーションのパフォーマンスが向上します。

[Q]ftz オプションを使用すると、アプリケーションが漸次アンダーフロー・モードの場合、デノーマル結果をゼロにフラッシュできます。 このオプションでは、デノーマル値がアプリケーションの動作に影響を与えない場合は、アプリケーションのパフォーマンスが向上することがあります。[Q]ftz オプションは、メインプログラムに使用されると、FTZ/DAZ ハードウェア・フラグをセットします。 -no-ftz/Qftz- オプションはフラグをそのままにします。

次の表では、FTZ/DAZ フラグのステータスに基づいて、どのようにコンパイラーがデノーマル値を処理するかを説明しています。

フラグ

ON の場合

OFF の場合

サポートするシステム

FTZ (flush-to-zero)

浮動小数点演算のデノーマル結果はゼロにセットされる

デノーマル結果は変更なし

インテル® 64 およびいくつかの IA-32 アーキテクチャー

DAZ (denormals-are-zero)

浮動小数点への入力として使用されるデノーマル値は、ゼロとして扱われる

正規化されていない命令の入力は変更なし

インテル® 64 アーキテクチャー、およびいくつかの IA-32 アーキテクチャー

[Q]ftz はパフォーマンス・オプションです。 これらのオプションを設定しても、プログラム中のすべてのデノーマル数がゼロにフラッシュされるとは限りません。ランタイム時に生成されるデノーマル数をゼロにフラッシュするだけです。

インテル® 64 および IA-32 システムでは、コンパイラーはデフォルトでメインルーチンにコードを挿入し、FTZ および DAZ をセットします。[Q]ftz オプションを -msse2 オプションあるいは /arch:sse2 オプションとともに IA-32 システムで使用すると、コンパイラーは、ランタイム・プロセッサー・チェックに基づいて条件付きで FTZ/DAZ をセットするコードを挿入します。 FTZ/DAZ フラグをセットするコードを挿入しないようにするには、-no-ftz (Linux* および OS X*) または /Qftz- (Windows*) を指定します。

IA-32 アーキテクチャー・ベースのシステムでは、-ftz または /Qftz がインテル® SSE を有効にするオプションとともに使用されると (-msse2/arch:sse2 など)、コンパイラーはメインルーチンにコードを挿入し、FTZ および DAZ をセットします。 このようなオプションなしに -ftz または /Qftz を使用すると、コンパイラーは、ランタイム・プロセッサー・チェックに基づいて条件付きで FTZ/DAZ をセットするコードを挿入します。 FTZ/DAZ をセットするコードを挿入しないようにするには、-no-ftz (Linux* および OS X*) または /Qftz- (Windows*) を指定します。

-ftz または /Qftz オプションは、メインプログラムがコンパイルされるときのみ影響を受けます。 このオプションは、プロセスに FTZ/DAZ モードをセットします。初期スレッドおよびそのプロセスによってその後に作成されるあらゆるスレッドは、FTZ/DAZ モードで動作します。

IA-32 およびインテル® 64 アーキテクチャー・ベースのシステムでは、O0 以外の O レベル最適化オプションは -ftz/Qftz をセットします。

このオプションがプログラムの数値動作で好ましくない結果を出力した場合、コマンドラインで -no-ftz または /Qftz- を使用することで、O3 最適化の利点を活用したままで、FTZ/DAZ モードをオフにできます。

次のインテル® Fortran 組込み関数を使用して、フラグを手動でセットすることができます。

RESULT = FOR_SET_FPE (FOR_M_ABRUPT_UND)


このヘルプトピックについてのフィードバックを送信