インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

-fp-model (/fp) オプションの使用

-fp-model オプション (Linux* および macOS*) または /fp オプション (Windows*) は、浮動小数点データの最適化を制御します。このオプションを使用して、プラットフォーム間や最適化レベルにおいて浮動小数点アプリケーションのパフォーマンス、精度、出力結果の一貫性を調整できます。

デノーマル数のサポートが必要ないアプリケーションでは、-fp-model または /fp オプションを、[Q]ftz オプションにともに使用してデノーマル結果をゼロにフラッシュし、すべてのインテル® アーキテクチャー上でランタイム・パフォーマンスを向上させることができます。

キーワードで、使用するセマンティクスを指定します。このオプションで指定したキーワードによって、呼び出される数学ルーチンの種類が異なることがあります。libirclibm、および libsvml ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。指定できる値は次のとおりです。

キーワード

説明

precise

浮動小数点データの精度に影響しない最適化を有効にし、中間結果をソースで定義された精度まで丸めます。

fast[=1|2]

浮動小数点データにより強力な最適化を有効にします。

consistent

異なる最適化レベルや同じアーキテクチャーの異なるプロセッサーで、一貫した再現性のある結果を有効にします。この設定は、次のオプションを指定するのと同じです。

Windows*: /fp:precise /Qfma- /Qimf-arch-consistency:true

Linux* および macOS*: -fp-model precise -no-fma -fimf-arch-consistency=true

strict

preciseexcept を有効にし、縮約を無効にし、浮動小数点環境の変更を可能にするプロパティーを有効にします。

source

浮動小数点データの精度に影響しない最適化を有効にし、中間結果をソースで定義された精度まで丸めます (precise キーワードと同じです)。

[no-]except (Linux* および macOS*) または
except[-] (Windows*)

厳密な浮動小数点例外セマンティクスを使用するかどうかを決定します。

このオプションのデフォルトは、-fp-model fast=1 または /fp:fast=1 です。コンパイラーは、浮動小数点演算により強力な最適化を使用します。

デフォルトのオプションキーワード -fp-model fast または /fp:fast を使用すると、浮動小数点演算を実装するべくコンパイラーが x87 またはインテル® SSE/AVX 命令を使用するかどうかによって、結果に大きな差異が発生することがあります。別のオプションキーワードを使用する場合、結果はより一定になります。

以下にキーワードの使用方法の例をいくつか示します。例には次の点が含まれます。

-fp-model fast または /fp:fast

ソースコード例:

REAL T0, T1, T2; 
... 
T0 = 4.0E + 0.1E + T1 + T2;

このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。

次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。

REAL T0, T1, T2; 
  ... 
T0 = (T1 + T2) + 4.1E;
REAL T0, T1, T2; 
  ... 
T0 = (T1 + 4.1E) + T2;

-fp-model source または /fp:source

これは、インテル® 64 アーキテクチャー・ベース・システムの -fp-model precise または /fp:precise に相当します。

ソースコード例

REAL T0, T1, T2; 
... 
T0 = 4.0E + 0.1E + T1 + T2;

このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。

次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。

REAL T0, T1, T2; 
  ... 
T0 = ((4.1E + T1) + T2);

-fp-model strict または /fp:strict

ソースコード例

REAL T0, T1, T2; 
  ... 
T0 = 4.0E + 0.1E + T1 + T2;

このオプションが指定されると、コンパイラーは次のセマンティクスを適用します。

次の例は、これらのセマンティクスを使用して、コンパイラーがオリジナルのコードを解釈する方法を示しています。

REAL T0, T1, T2; 
  ... 
T0 = REAL ((((REAL)4.0E + (REAL)0.1E) + (REAL)T1) + (REAL)T2);

関連情報