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

fimf-use-svml、Qimf-use-svml

インテルの数学ライブラリー (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

IDE オプション

なし

代替オプション

なし

関連情報