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

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) スレッドレイヤーは、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数がアプリケーションが実行されるシステムの複数の計算コアをどのように活用するかを定義します。下記で説明しているように、アプリケーションとこのレイヤーの 1 つの適切なインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) をリンクします。リンクするライブラリー (並列またはシーケンシャル) に応じて、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は並列モードまたはシーケンシャル・モードで動作します。

並列モードでは、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) はシステムで利用可能な複数のプロセッサー・コアを利用し、OpenMP* またはインテル® TBB スレッディング・テクノロジーを使用するため、アプリケーションにリンクする適切なスレッド・ランタイム・ライブラリー (RTL) が必要です。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の使用に関係なく、アプリケーションでスレッド RTL が必要になることがあります。アプリケーションに複数のスレッド RTL をリンクしないでください。スレッド RTL は、コンパイラーにより提供されます。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、特定のコンパイラーのスレッド RTL に依存するいくつかのスレッド・ライブラリーを提供します。スレッド・ライブラリーの選択は、アプリケーションで使用するスレッド RTL に依存します。

インテル® コンパイラーの OpenMP* RTL は、<親ディレクトリー>/compiler/lib の下にある libiomp5.so ライブラリーです。この RTL は GNU* コンパイラー (gcc および gfortran) と互換性があります。インテル® コンパイラーの OpenMP* RTL に関する詳細は、https://www.openmprtl.org (英語) を参照してください。

インテル® コンパイラーのインテル® TBB RTL は、<oneAPI ROOT>/tbb/<version>/lib/<arch>/gcc4.8 の下にある libtbb.so ライブラリーです。インテル® コンパイラーのインテル® TBB RTL に関する詳細は、https://www.threadingbuildingblocks.org (英語) を参照してください。

シーケンシャル・モードでは、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) はスレッド化されていないコードを実行するため、スレッド RTL は必要ありません。また、スレッドの数を制御する環境変数と関数は無視されます。次のように特別な理由がない限り、シーケンシャル・モードでライブラリーを使用しないでください。

適切な RTL をアプリケーションにリンクすることが重要です。以下の表は、選択するインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) スレッドレイヤーのライブラリーとスレッド RTL の説明です。

アプリケーション

インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL)

必要な RTL

OpenMP* を使用 コンパイル

実行モデル

スレッドレイヤー

x

任意のコンパイラー

並列

スタティック・リンク:

libmkl_intel_thread.a

ダイナミック・リンク:

libmkl_intel_thread.so

libiomp5.so

x

任意のコンパイラー

並列

スタティック・リンク:

libmkl_tbb_thread.a

ダイナミック・リンク:

libmkl_tbb_thread.so

libtbb.so

x

任意のコンパイラー

シーケンシャル

スタティック・リンク:

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

はい

ほかのコンパイラー

並列

サポートしていません。異なるプログラミング環境でのインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を使用

 

シーケンシャル・モードでは、libmkl_sequential.a および libmkl_sequential.so ライブラリーは libpthread に依存するため、リンクラインに POSIX スレッド・ライブラリー (libpthread) を追加します。

製品および性能に関する情報

性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。

改訂 #20201201

関連情報