インテル® MKL 2017 デベロッパー・ガイド
インテル® MKL スレッドレイヤーは、インテル® MKL 関数がアプリケーションを実行するシステムの計算コアを利用する方法を定義します。下記で説明しているように、アプリケーションとこのレイヤーの 1 つの適切なインテル® MKL ライブラリーをリンクします。リンクするライブラリー (スレッドまたはシーケンシャル) に応じて、インテル® MKL は並列モードまたはシーケンシャル・モードで動作します。
「並列モード」では、インテル® MKL はシステムで利用可能な複数のプロセッサー・コアを利用し、OpenMP* またはインテル® TBB スレッディング・テクノロジーを使用するため、アプリケーションにリンクする適切なスレッド・ランタイム・ライブラリー (RTL) が必要です。インテル® MKL の使用に関係なく、アプリケーションでスレッド RTL が必要になることがあります。アプリケーションに複数のスレッド RTL をリンクしないでください。スレッド RTL は、コンパイラーにより提供されます。インテル® MKL は、特定のコンパイラーのスレッド RTL に依存するいくつかのスレッド・ライブラリーを提供します。スレッド・ライブラリーの選択は、アプリケーションで使用するスレッド RTL に依存します。
インテル® コンパイラーの OpenMP* RTL は、libiomp5.so ライブラリーで、<親ディレクトリー>/compiler/lib 以下に含まれています。この RTL は GNU* コンパイラー (gcc および gfortran) と互換性があります。インテル® コンパイラーの OpenMP* RTL に関する詳細は、https://www.openmprtl.org (英語) を参照してください。
インテル® コンパイラーのインテル® TBB RTL は、libtbb.so ライブラリーで、<親ディレクトリー>/tbb/lib 以下に含まれています。インテル® コンパイラーのインテル® TBB RTL に関する詳細は、https://www.threadingbuildingblocks.org (英語) を参照してください。
「シーケンシャル・モード」では、インテル® MKL はスレッド化されていないコードを実行するため、スレッド RTL は必要ありません。また、スレッドの数を制御する環境変数と関数は無視されます。次のように特別な理由がない限り、シーケンシャル・モードでライブラリーを使用しないでください。
適切な RTL をアプリケーションにリンクすることが重要です。以下の表は、選択するインテル® MKL スレッドレイヤーのライブラリーとスレッド RTL の説明です。
アプリケーション |
インテル® MKL |
必要な RTL |
||
---|---|---|---|---|
OpenMP* を使用 | コンパイル | 実行モード |
スレッドレイヤー |
|
いいえ |
任意のコンパイラー |
並列 |
スタティック・リンク: libmkl_intel_thread.a ダイナミック・リンク: libmkl_intel_thread.so |
libiomp5.so |
いいえ |
任意のコンパイラー |
並列 |
スタティック・リンク: libmkl_tbb_thread.a ダイナミック・リンク: libmkl_tbb_thread.so |
libtbb.so |
いいえ |
任意のコンパイラー |
シーケンシャル |
スタティック・リンク: libmkl_sequential.a ダイナミック・リンク: libmkl_sequential.so |
なし† |
はい |
インテル® コンパイラー |
並列 |
スタティック・リンク: libmkl_intel_thread.a ダイナミック・リンク: libmkl_intel_thread.so |
libiomp5.so |
はい |
GNU* コンパイラー |
並列 |
推奨! | |
スタティック・リンク: libmkl_intel_thread.a ダイナミック・リンク: libmkl_intel_thread.so |
libiomp5.so |
|||
はい |
GNU* コンパイラー |
並列 |
スタティック・リンク: libmkl_gnu_thread.a ダイナミック・リンク: libmkl_gnu_thread.so |
GNU* OpenMP* RTL |
はい |
PGI* コンパイラー |
並列 |
スタティック・リンク: libmkl_pgi_thread.a ダイナミック・リンク: libmkl_pgi_thread.so |
PGI* OpenMP* RTL |
はい |
ほかのコンパイラー |
並列 |
サポートしていません。インテル® MKL をシーケンシャル・モードで使用してください。 |
† シーケンシャル・モードでは、libmkl_sequential.a および libmkl_sequential.so ライブラリーは libpthread に依存するため、リンク行に POSIX スレッド・ライブラリー (libpthread) を追加します。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |