インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
インテルの数学ライブラリー (LIBM) の代わりに、SVML (Short Vector Math Library) を使用して数学ライブラリー関数を実装するようにコンパイラーに指示します。
Linux* および macOS*: | -fimf-use-svml=value[:funclist] |
Windows*: | /Qimf-use-svml:value[:funclist] |
funclist |
属性が適用される 1 つまたは複数の数学ライブラリー関数のリストです (オプション)。Fortran 標準の数学関数名ではなく、実際の数学ライブラリー名を指定する必要があります。複数の関数を指定する場合は、カンマで区切る必要があります。 sin と sinf のように特定の精度向けのバリエーションは異なる関数と見なされるため、単精度と倍精度の両方の正弦関数で SVML を使用するように指定するには、-fimf-use-svmlt=true:sin,sinf (または /Qimf-use-svml:true:sin,sinf) を使用する必要があります。 |
false |
数学ライブラリー関数は、インテルの数学ライブラリーを使用して実装されますが、-fast-transcendentals または /Qfast-transcendentals などのほかのコンパイラー・オプションを指定すると、コンパイラーは LIBM または SVML を利用して数学ライブラリー関数を実装することができます。 |
このオプションは、SVML (Short Vector Math Library) を使用して数学ライブラリー関数を実装するようコンパイラーに指示します。-fimf-use-svml=true または /Qimf-use-svml:true を指定すると、選択された固有の SVML バージョンは -fimf-precision (Linux* および macOS*) または /Qimf-precision (Windows*) と -fp-model (Linux* および macOS*) または /fp (Windows*) の影響を受けます。このオプションは、LIBM で実装され、SVML では実装されていない数学ライブラリー関数には効果がありません。
-fp-model (Linux* および macOS*) または /fp (Windows*) オプションの安全な設定 (precise など) では、このオプションにより数学ライブラリー関数の精度がわずかに低下します。これは、最も高精度の SVML 関数であっても LIBM の対応する関数よりも精度がわずかに劣るためです。さらに、SVML 関数は、浮動小数点例外を正確に発行できない可能性があり、errno を維持できず、最も近い偶数への丸めモードでのみ正しく動作するように設計されています。
-fimf-use-svml=true または /Qimf-use-svml:true を -fp-model (Linux* および macOS*) または /fp (Windows*) の安全な設定と一緒に使用する利点は、コンパイラーが数学ライブラリー関数の呼び出しを含むループを効率良くベクトル化できるようにして、パフォーマンスを大幅に向上できることです。
SVML を使用して特定の数学関数で精度を指定する必要がある場合は、その精度の関数名を指定します。例えば、倍精度の正弦関数の場合は sin を -fimf-arch-consistency=true:sin または /Qimf-arch-consistency:true:sin のように指定します。単精度の平方根の場合は sqrtf を -fimf-arch-consistency=false:sqrtf または /Qimf-arch-consistency:false:sqrtf のように指定します。
関数名を指定しない場合、すべての関数 (およびすべての精度) に設定が適用されます。ただし、個々の関数名を指定すると、指定された関数の対応する精度のみに設定が適用されます。例えば、sinf は単精度の正弦関数のみ、sin は倍精度の正弦関数のみ、sinl は拡張精度の正弦関数のみ、というように適用されます。
-mia32 オプションまたは /arch:IA32 オプションを指定する場合、ベクトル命令は使用できません。そのため、-mia32 と -fimf-use-svml=true または /arch:IA32 と /Qimf-use-svml:true を一緒に指定することはできません。
SVML 関数は予期しない浮動小数点例外を発行する可能性があるため、浮動小数点例外をトラップする機能の使用には注意が必要です。例えば、-fimf-use-svml=true オプションと -fp-trap オプション、または /Qimf-use-svml:true オプションと /Qfp-trap オプションを一緒に指定する場合は注意が必要です。一部の数学ライブラリー関数への入力では、これらのオプションを一緒に指定すると、プログラムが予期せずトラップする可能性があります。
Fortran 標準の数学組込み関数名は、数学ライブラリーの数学組込み関数名と異なります。該当する Fortran 数学関数に対応する、生成された実際の数学ライブラリー名を見つける必要があります。
この 1 つの方法として、/Fa または /S (Windows*) あるいは -S (Linux*) オプションを指定して、アセンブリー・コードを生成します。アセンブリー・コードで実際の数学ライブラリー名を確認できます。
例えば、SIN(x) を呼び出すプログラムを作成し、x を REAL(KIND=4) として宣言して、/S (Windows*) を指定してプログラムのアセンブリー・コードを生成すると、アセンブリー・コードで sinf の呼び出しを確認できます。
この場合、単精度の正弦関数で SVML の使用を要求するには、-fimf-use-svml=true: sinf (または /Qimf-use-svml:true: sinf) と指定します。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |
なし