インテル® マス・カーネル・ライブラリー 11.2 ユーザーズガイド
インテル® マス・カーネル・ライブラリー (インテル® MKL) には、オプションのスレッド化コントロール (OpenMP* とは独立した環境変数とサービス関数) が用意されています。これらのコントロールは OpenMP* の等価な変数と似ていますが、OpenMP* 変数よりも優先されます。つまり、インテル® MKL 固有のコントロールが最初に検査されます。これらのコントロールを OpenMP* 変数とともに使用することで、インテル® MKL とライブラリーを互いに呼び出さないアプリケーションの部分をスレッド化することができます。
これらのコントロールを使用すると、OpenMP* 設定とは無関係にインテル® MKL のスレッド数を指定できます。インテル® MKL は実際には推奨と異なるスレッド数を使用することがありますが、コントロールは呼び出しアプリケーションで使用されている数が利用できない場合、推奨するスレッド数を使用するようにライブラリーに指示します。
インテル® MKL では、システムリソースなど、特定の理由により、スレッド数が選択できないことがあります。
アプリケーションでインテル® MKL スレッド化コントロールを使用するかどうかは任意です。コントロールを使用しない場合、ライブラリーは、デフォルトのスレッド数が異なることを除けば、スレッド化に関してはインテル® MKL 9.1 と同じように動作します。
『インテル® MKL リファレンス・マニュアル』の「Fourier Transform Functions」のセクションの「Number of User Threads」サブセクションに、インテル® MKL スレッド化コントロールを使用して FFT 計算のスレッド数を設定する方法が説明されています。
次の表は、スレッド化コントロール用のインテル® MKL 環境変数とサービス関数、および等価な OMP 環境変数の一覧です。
環境変数 |
サポート関数 |
内容 |
等価な OpenMP* 環境変数 |
---|---|---|---|
MKL_NUM_THREADS |
mkl_set_num_threads mkl_set_num_threads_local |
使用するスレッド数を示します。 |
OMP_NUM_THREADS |
MKL_DOMAIN_NUM_
|
mkl_domain_set_num_threads |
特定の関数ドメイン用のスレッド数を示します。 |
|
MKL_DYNAMIC |
mkl_set_dynamic |
インテル® MKL がスレッド数を動的に変更できるようにします。 |
OMP_DYNAMIC |
関数はそれぞれの環境変数よりも優先されます。
このため、インテル® MKL がアプリケーションで指定されたスレッド数を使用し、アプリケーションのユーザーが環境変数を使用してスレッド数を変更しないようにする場合は、mkl_set_num_threads() を呼び出してスレッド数を設定します。この設定は、環境変数の設定よりも優先されます。
次の例は、インテル® MKL 関数 mkl_set_num_threads() を使用して 1 つのスレッドに設定する方法を示しています。
// ******* C language ******* #include <omp.h> #include <mkl.h> ... mkl_set_num_threads ( 1 );
// ******* Fortran language ******* ... call mkl_set_num_threads( 1 )
スレッド化コントロール関数、パラメーター、呼び出し構文、コードの例は、『インテル® MKL リファレンス・マニュアル』を参照してください。