インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
浮動小数点演算のセマンティクスを制御します。
Linux* および OS X*: | -fp-model keyword |
Windows®: | /fp:keyword |
keyword |
使用するセマンティクスを指定します。設定可能な値は以下のとおりです。
|
-fp-model fast=1 |
浮動小数点の演算時に、より強力な最適化を行います。 |
浮動小数点演算のセマンティクスを制御します。
keyword は次のグループに分けられます。
グループ A: precise、fast、consistent、strict
グループ B: source、double、extended
グループ C: except (または否定形)
複数の keyword を使用できます。 ただし、次の規則が適用されます。
同じコンパイル処理で fast と except を一緒に指定することはできません。
その他のグループ A、B、C の組み合わせは指定できます。
fast はデフォルトなので、グループ A や B の keyword を指定しないで except を指定することはできません。
グループ A とグループ B から keyword を 1 つずつ指定します。 グループ A またはグループ B から複数の keyword を指定すると、最後 (右端) の keyword だけが有効になります。
複数回、except を指定した場合は、最後 (右端) の except だけが有効になります。
浮動小数点 (FP) 環境とは、FP 機械語命令の動作を制御するレジスターの集合で、現在の FP の状態を指します。 浮動小数点環境には、丸めモード制御、例外マスク、FTZ (Flush-to-Zero) 制御、例外ステータスフラグ、およびその他の浮動小数点関連の機能が含まれます。
オプション |
説明 |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-fp-model precise または /fp:precise |
浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようにコンパイラーに指示します。 浮動小数点演算の結果を変更してしまう最適化は無効になります。ANSI 規格に厳密に準拠していなければなりません。 これらのセマンティクスは、シリアルコードおよびコンパイラーによりベクトル化または自動並列化されたコードの浮動小数点演算の再現性 (結果の一貫性) を保証しますが、パフォーマンスを低下させる可能性があります。 その他の並列コードの値の安全性や実行ごとの再現性は保証しません。 OpenMP* コードにおける浮動小数点リダクション操作の実行ごとの再現性は、KMP_DETERMINISTIC_REDUCTION 環境変数を使用してスレッド数を固定することで得られる可能性があります。 この環境変数に関する詳細は、「サポートされる環境変数」を参照してください。 コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 中間結果は、グループ B の keyword で上書きされない限り、次の表で示される精度によって計算されます。
浮動小数点セマンティクスはデフォルトで無効です。 これらのセマンティクスを有効にするには、-fp-model except または /fp:except を指定しなければなりません。 |
||||||||||||
-fp-model fast[=1|2] または /fp:fast[=1|2] |
浮動小数点の演算時に、より強力な最適化を行うようにコンパイラーに指示します。 これらの最適化で速度は向上しますが、浮動小数点演算の精度と再現性に影響する可能性があります。 fast を指定することは fast=1 を指定するのと同じです。 fast=2 を指定するとより早く結果を生成できますが、精度が落ちます。 浮動小数点例外セマンティクスはデフォルトでは無効です。同じコンパイル処理で fast と except を一緒に指定できないため、有効にすることはできません。 例外セマンティクスを有効にするには、別の keyword (詳細は、ほかの keyword の説明を参照してください) を明示的に指定する必要があります。 例外セマンティクスを有効にするには、別の keyword (詳細は、ほかの keyword の説明を参照してください) を明示的に指定する必要があります。 |
||||||||||||
-fp-model consistent または /fp:consistent |
異なる最適化レベルや同じアーキテクチャーの異なるプロセッサーで一貫した再現性のある浮動小数点結果となるコードを生成するようにコンパイラーに指示します。 詳細は、『インテル® コンパイラーの浮動小数点演算における結果の一貫性』 (http://www.isus.jp/article/compileroptimization/consistency-of-floating-point-results/) を参照してください。 |
||||||||||||
-fp-model strict または /fp:strict |
浮動小数点の演算時に、厳密に精度に影響しない最適化を行うようにコンパイラーに指示し、浮動小数点例外セマンティクスを有効にします。 これは最も厳密な浮動小数点モデルです。 コンパイラーはデフォルトの浮動小数点環境を想定しません。変更することが可能です。 浮動小数点例外セマンティクスは、明示的に -fp-model no-except または /fp:except- を指定することで無効にできます。 |
||||||||||||
-fp-model source または /fp:source |
このオプションは、中間結果をソースコードで定義された精度に丸めます。 また、グループ A の keyword で上書きされない限り、precise の keyword を意味します。 中間式では、より高い精度のオペランドのソースが使用されます (該当する場合)。
コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 |
||||||||||||
-fp-model double または /fp:double |
このオプションは、中間結果を次のように丸めます。
このオプションは、グループ A の keyword で上書きされない限り、precise の keyword を意味します。 コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 |
||||||||||||
-fp-model extended または /fp:extended |
このオプションは、中間結果を次のように丸めます。
このオプションは、グループ A の keyword で上書きされない限り、precise の keyword を意味します。 コンパイラーはデフォルトの浮動小数点環境を想定します。変更はできません。 |
||||||||||||
-fp-model except または /fp:except |
厳密な浮動小数点例外セマンティクスを使用するようにコンパイラーに指示します。 |
次のオプションのいずれも指定されない場合、-fp-model オプションと /fp オプションは、数学ライブラリー関数の結果における相対誤差の最大限許容値 (max-error) を定義します。
-fimf-accuracy-bits (Linux* および OS X*) または /Qimf-accuracy-bits (Windows®)
-fimf-max-error (Linux* および OS X*) または /Qimf-max-error (Windows®)
-fimf-precision (Linux* および OS X*) または /Qimf-precision (Windows®)
[Q]fast-transcendentals
-fp-model fast (および /fp:fast) オプションは -fimf-precision=medium (/Qimf-precision:medium) オプションを設定し、-fp-model precise (および /fp:precise) オプションは -fimf-precision=high (および /Qimf-precision:high) オプションを意味します。 -fp-model fast=2 (および /fp:fast2) オプションは -fimf-precision=medium (および /Qimf-precision:medium) と -fimf-domain-exclusion=15 (および /Qimf-domain-exclusion=15) を設定します。
Microsoft® Visual Studio® で Visual C++® プロジェクトを作成する場合、デフォルトで /fp:precise オプションが設定されます。 このオプションは、特定の最適化を無効にすることで、浮動小数点演算の一貫性を高める浮動小数点モデルを使用します。これにより、パフォーマンスが低下する可能性があります。 一般的なデフォルトである /fp:fast オプションに戻すには、[Floating Point Model (浮動小数点モデル)] プロジェクト・プロパティーの値を Fast に変更します。
Visual Studio®: [Code Generation (コード生成)] > [Floating Point Model (浮動小数点モデル)]
[Code Generation (コード生成)] > [Enable FloatingPoint Exceptions (浮動小数点の例外を有効にする)]
[Code Generation (コード生成)] > [Floating PointExpression Evaluation (浮動小数点式の評価)]
Eclipse*: [Floating point (浮動小数点)] > [Floating Point Model (浮動小数点モデル)]
Xcode*: [Floating point (浮動小数点)] > [Floating Point Model (浮動小数点モデル)]
[Floating point (浮動小数点)] > [Reliable floating-point exceptions model (信頼性のある浮動小数点例外モデル)]
なし
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |
『インテル® コンパイラーの浮動小数点演算における結果の一貫性』 (http://www.isus.jp/article/compileroptimization/consistency-of-floating-point-results/) も参考になります。