インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、OpenMP* とは独立してインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) のスレッドを制御する環境変数とサポート関数を提供します。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 固有のスレッド制御は、OpenMP* の制御よりも優先されます。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 固有のスレッド制御を使用して、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) とプログラムの残りの部分の間で OpenMP* スレッドを分散します。
一部のインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) ルーチンは、アルゴリズムでサポートされない場合や、(OpenMP* オーバーヘッドの軽減やデータの局所性の向上により) ルーチンのパフォーマンスが向上する場合、スレッド制御によって推奨される OpenMP* スレッド数よりも少ないスレッド数を使用することがあります。アルゴリズムで許可される場合、OpenMP* オーバーヘッドとデータの局所性に関係なく、常に推奨される OpenMP* スレッド数を使用するには、MKL_DYNAMIC 環境変数を FALSE に設定するか、mkl_set_dynamic(0) を呼び出します。
次の表は、スレッド制御用のインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 環境変数とサービス関数、および等価な OMP 環境変数の一覧です。
環境変数 |
サポートされる機能 |
コメント |
等価な OpenMP* 環境変数 |
|---|---|---|---|
MKL_NUM_THREADS |
mkl_set_num_threads mkl_set_num_threads_local |
使用する OpenMP* スレッドの数を示します。 |
OMP_NUM_THREADS |
MKL_DOMAIN_NUM_ |
mkl_domain_set_num_threads |
特定の関数ドメインの OpenMP* スレッドの数を示します。 |
|
MKL_DYNAMIC |
mkl_set_dynamic |
インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) が OpenMP* スレッド数を動的に変更できるようにします。 |
OMP_DYNAMIC |
mkl_set_num_threads() を呼び出して、MKL_NUM_THREADS、MKL_DOMAIN_NUM_THREADS、OMP_NUM_THREADS 環境変数の設定に関係なく、指定した OpenMP* スレッド数をインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) で使用します。
以下の例は、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) で 1 つのスレッドを使用する方法を示しています。
// ******* C 言語 *******
#include <mkl.h>
...
mkl_set_num_threads ( 1 );
// ******* Fortran 言語 *******
...
call mkl_set_num_threads( 1 )