インテル® MKL 11.3 ユーザーズガイド

スレッド・ライブラリーのリンク

インテル® 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 (インテル® SSE2)、インテル® ストリーミング SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルでは、インテル製ではないマイクロプロセッサーに対して、最適化の提供、機能、効果を保証していません。本製品のマイクロプロセッサー固有の最適化は、インテル製マイクロプロセッサーでの使用を目的としています。インテル® マイクロアーキテクチャーに非固有の特定の最適化は、インテル製マイクロプロセッサー向けに予約されています。この注意事項の適用対象である特定の命令セットの詳細は、該当する製品のユーザー・リファレンス・ガイドを参照してください。

改訂 #20110804

関連情報