インテル® Fortran コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
算術関数が正しい結果を提供しなければならない入力引数のドメインを指定します。
Linux* および OS X*: | -fimf-domain-exclusion=classlist[:funclist] |
Windows*: | /Qimf-domain-exclusion:classlist[:funclist] |
このオプションは、算術関数が正しい結果を提供しなければならない入力引数のドメインを指定します。funclist で指定した関数が浮動小数点数のクラスの標準に準拠しない結果を生成しても、プログラムが正しく動作することを示します。
このオプションは、実行時のパフォーマンスと結果の精度に影響します。除外されるクラスの数が多いほど、より速いコードシーケンスが使用されます。
特定の算術関数の精度を定義する必要がある場合は、その関数名を指定します。例えば、倍精度の正弦関数の場合は sin、単精度の正弦関数の場合は sinf を指定します。そして、-fimf-domain-exclusion=denormals:sin または /Qimf-domain-exclusion:denormals:sin (倍精度の正弦の場合)、-fimf-domain-exclusion=extremes:sqrtf または /Qimf domain-exclusion:extremes:sqrtf (単精度の平方根の場合) のように指定します。
関数名を指定しない場合、すべての関数 (およびすべての精度) に設定が適用されます。ただし、個々の関数名を指定すると、指定された関数の対応する精度のみに設定が適用されます。例えば、sinf は単精度の正弦関数のみ、sin は倍精度の正弦関数のみ、sinl は拡張精度の正弦関数のみ、というように適用されます。
LIBM (算術ライブラリー) および SVML (Short Vector Math Library) ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。
インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。 改訂 #20110804 |
次の単精度の exp2f 関数について考えてみます。
以下は、修正なしの 2 命令のシーケンスです。
vcvtfxpntps2dq zmm1 {k1}, zmm0, 0x50 // zmm1 <-- rndToInt(2^24 * x)
vexp223ps zmm1 {k1}, zmm1 // zmm1 <-- exp2(x)
上記の 2 命令のシーケンスは NaN を正しく処理しません。NaN を正しく処理するため、次の修正を含める必要があります。
vpxord zmm2, zmm2, zmm2 // zmm2 <-- 0
vfixupnanps zmm1 {k1}, zmm0, zmm2 {aaaa} // zmm1 <-- QNaN(x) if x is NaN <F>
vfixupnanps 命令を含めない場合、NaN 値を除くすべての引数は正しく処理されます。例えば、次のオプションは 2 命令のシーケンスを生成します。
-fimf-domain-exclusion=2:exp2f <- NaN を除外 (2 は NaNs に対応する値)
-fimf-domain-exclusion=6:exp2f <- NaN と infinities を除外 (4 は infinities に対応する値; 2 + 4 = 6)
-fimf-domain-exclusion=7:exp2f <- NaN、infinities、extremes を除外 (1 は extremes に対応する値; 2 + 4 + 1 = 7)
-fimf-domain-exclusion=15:exp2f <- NaN、infinities、extremes、denormals を除外 (8 は denormals に対応する値; 2 + 4 + 1 + 8=15)
vfixupnanps 命令を含める場合、NaN 値を含むすべての引数が正しく処理されます。例えば、次のオプションは 4 命令のシーケンスを生成します。
-fimf-domain-exclusion=1:exp2f <- extremes のみ除外 (1 は extremes に対応する値)
-fimf-domain-exclusion=4:exp2f <- infinities のみ除外 (4 は infinities に対応する値)
-fimf-domain-exclusion=8:exp2f <- denormals のみ除外 (8 は denormals に対応する値)
-fimf-domain-exclusion=13:exp2f <- extremes、infinities、denormals のみ除外 (1 + 4 + 8 = 13)