インテルの数学ライブラリー

インテル® oneAPI DPC++/C++ コンパイラーには、高度に最適化された正確な数学関数を含む数値計算ソフトウェア・ライブラリーが含まれています。これらの関数は、科学やグラフィック・アプリケーションに広く使用されます。同様に、浮動小数点演算を多用するプログラムにも使用されます。C99 _Complex データ型のサポートを含めるには、[Q]std=c99 コンパイラー・オプションを使用してください。

インテルの数学ライブラリーの多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより最適化されます。

mathimf.h ヘッダーファイルには、インテルの数学ライブラリー関数のプロトタイプが含まれています。

インテルの math.h ヘッダーファイルは、gcc の libm と互換性がありますが、gcc の数学ライブラリーにリンクしません。ソースは、gccまたは icx でビルドできます。icx でビルドするとインテルの数学ライブラリーがリンクされます。インテルの数学ライブラリーのヘッダーファイル mathimf.h には、インテルの数学ライブラリー固有の追加の関数が含まれています。ソースのビルドには、インテル® oneAPI DPC++/C++ コンパイラーとライブラリーを使用する必要があります。

expllogl のようなインテルの数学ライブラリーの long double 型の関数は、Microsoft* ライブラリーと ABI 互換ではありません。インテルのコンパイラーとライブラリーは、80 ビットの long double 型をサポートしています (Qlong-double オプションの説明を参照)。互換性を保持するため、インテルの数学ライブラリーと一緒に math.hmathimf.h ヘッダーファイルを使用します。

Linux* 用のインテルの数学ライブラリー

アプリケーションにリンクされる数学ライブラリーは、指定されたコンパイルまたは参照オプションに依存します。

ライブラリー

説明

libimf.a

デフォルトのスタティック数学ライブラリー

libimf.so

デフォルトの共用数学ライブラリー

インテル® コンパイラーの数学ライブラリーには、さまざまなインテル® プラットフォーム向けにパフォーマンスが最適化された実装が含まれています。デフォルトでは、ハードウェアに最適な実装がランタイムに選択されます。ライブラリーがマルチスレッド・コードをディスパッチすると、データ競合が発生することがあります。これは、特定のソフトウェア解析ツールで検出できます。しかし、スレッドが同じ CPUID を持つコア上で実行されている限り、これらのデータ競合は無害であり、問題にはなりません。

Windows* 用のインテルの数学ライブラリー

アプリケーションにリンクされる数学ライブラリーは、指定されたコンパイルまたは参照オプションに依存します。

ライブラリー

オプション

説明

libm.lib

 

デフォルトのスタティック数学ライブラリー

libmmt.lib

/MT

マルチスレッドのスタティック数学ライブラリー

libmmd.lib

/MD

ダイナミック・リンク数学ライブラリー

libmmdd.lib

/MDd

デバッグ用ダイナミック・リンク数学ライブラリー

libmmds.lib

 

/MD オプションでコンパイルされたスタティック・バージョン

oneAPI と OpenCL* の注意事項

現在、oneAPI は OpenCL 数学関数の ULP 精度 (英語) の決定に OpenCL 仕様を使用しています。単精度関数と倍精度関数の表を含む精度に関する詳細は、Khronos* OpenCL* 仕様の「ULP 相対誤差」 (英語) セクションを参照してください。

数学関数は、デバイスによって精度のレベルが異なります。OpenCL* 仕様では、最大 ULP 誤差の制限が設定されています (該当する場合) が、個々のデバイスはより高精度の実装を提供している場合がります。OpenCL* 実装が CPU 向けに最適化されている場合、同じコードを GPU デバイスで使用しても動作しない場合があります。

関連情報