インテル® MKL 2017 デベロッパー・ガイド
インテル® MKL には、OpenMP* とは独立した、インテル® MKL スレッドを制御するための環境変数とサービス関数が用意されています。インテル® MKL 固有のスレッド化コントロールは、OpenMP* コントロールよりも優先されます。インテル® MKL 固有のスレッド化コントロールを使用して、インテル® MKL とほかのプログラム間で OpenMP* スレッドを分配します。
一部のインテル® MKL ルーチンは、アルゴリズムでサポートされない場合または (OpenMP* オーバーヘッドの軽減やデータの局所性の向上により) ルーチンのパフォーマンスが向上する場合、スレッド化コントロールによって推奨される OpenMP* スレッド数よりも少ないスレッド数を使用することがあります。アルゴリズムで許可される場合、OpenMP* オーバーヘッドとデータの局所性に関係なく、常に推奨される OpenMP* スレッド数を使用するには、MKL_DYNAMIC 環境変数を FALSE に設定するか、mkl_set_dynamic(0) を呼び出します。
『インテル® 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 |
使用する OpenMP* スレッド数を示します。 |
OMP_NUM_THREADS |
MKL_DOMAIN_NUM_THREADS
|
mkl_domain_set_num_threads |
特定の関数ドメイン用の OpenMP* スレッド数を示します。 |
|
MKL_DYNAMIC |
mkl_set_dynamic |
インテル® MKL が OpenMP* スレッド数を動的に変更できるようにします。 |
OMP_DYNAMIC |
mkl_set_num_threads() を呼び出して、MKL_NUM_THREADS、MKL_DOMAIN_NUM_THREADS、OMP_NUM_THREADS 環境変数の設定に関係なく、指定した OpenMP* スレッド数をインテル® MKL で使用します。
次の例は、インテル® MKL で 1 つのスレッドを使用するように強制します。
// ******* C language *******
#include <mkl.h>
...
mkl_set_num_threads ( 1 );
// ******* Fortran language *******
...
call mkl_set_num_threads( 1 )
スレッド化コントロール関数、パラメーター、呼び出し構文、コードの例は、『インテル® MKL デベロッパー・リファレンス』を参照してください。