インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
算術関数が正しい結果を提供すべき入力引数のドメインを指定します。
Linux* および OS X*: | -fimf-domain-exclusion=classlist[:funclist] |
Windows*: | /Qimf-domain-exclusion:classlist[:funclist] |
classlist |
次のいずれかです。
|
||||||||||||||||||||||||||||||||||
funclist |
属性が適用される 1 つまたは複数の算術ライブラリー関数のリストです (オプション)。複数の関数を指定する場合は、カンマで区切る必要があります。sin と sinf のように特定の精度向けのバリエーションは異なる関数と見なされるため、単精度と倍精度の両方の正弦関数で高い精度を指定するには、-fimf-domain-exclusion=4:sin,sinf (または /Qimf-domain-exclusion:4:sin,sinf) を使用する必要があります。 また、単精度除算は /f、倍精度除算は /、拡張精度除算は /l、4 倍精度除算は /q のように、記号を使って指定することもできます。例えば、次のように指定します。 -fimf-domain-exclusion=4 または /Qimf-domain-exclusion:4 -fimf-domain-exclusion=5:/,powf または /Qimf-domain-exclusion:5:/,powf -fimf-domain-exclusion=23:log,logf,/,sin,cosf または /Qimf-domain-exclusion:23:log,logf,/,sin,cosf funclist 引数を指定しない場合、すべての算術ライブラリー関数にドメインの制約が適用されます。 |
0 (ゼロ) |
コンパイラーは、算術ライブラリー関数を呼び出すときにデフォルトのヒューリスティックを使用します。 |
このオプションは、算術関数が正しい結果を提供すべき入力引数のドメインを指定します。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) ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。
なし
次の単精度の exp2f 関数について考えてみます。
演算 | y = exp2f(x) |
精度 | 1.014 ulp |
命令数 | 4 (修正なしの場合は 2) |
以下は、修正なしの 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)
インテル® コンパイラーは、互換マイクロプロセッサー向けには、インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。 改訂 #20110804 |