インテル® MKL 2017 デベロッパー・ガイド
MKL_DOMAIN_NUM_THREADS 環境変数は、特定の関数ドメイン用の OpenMP* スレッド数を示します。
MKL_DOMAIN_NUM_THREADS には、文字列値 <MKL 環境文字列> を以下の形式で指定します。
<MKL 環境文字列> ::= <MKL ドメイン環境文字列> { <区切り文字><MKL ドメイン環境文字列> }
<区切り文字> ::= [ <スペース記号>* ] ( <スペース記号> | <カンマ記号> | <セミコロン記号> | <コロン記号>) [ <スペース記号>* ]
<MKL ドメイン環境文字列> ::= <MKL ドメイン環境名><使用法><スレッド数>
<MKL ドメイン環境名> ::= MKL_DOMAIN_ALL | MKL_DOMAIN_BLAS | MKL_DOMAIN_FFT | MKL_DOMAIN_VML | MKL_DOMAIN_PARDISO
<使用法> ::= [ <スペース記号>* ] ( <スペース記号> | <等号記号> | <カンマ記号>) [ <スペース記号>* ]
<スレッド数> ::= <正の整数>
<正の整数> ::= <10 進数> | <8 進数> | <16 進数>
上記の構文で、<MKL ドメイン環境名> の値は、次の関数ドメインを示します。
MKL_DOMAIN_ALL |
すべての関数ドメイン |
MKL_DOMAIN_BLAS |
BLAS ルーチン |
MKL_DOMAIN_FFT |
非クラスターフーリエ変換関数 |
MKL_DOMAIN_VML |
ベクトルマス (VM) |
MKL_DOMAIN_PARDISO |
インテル® MKL PARDISO (並列直接法スパースソルバー PARDISO に基づく直接法スパースソルバー) |
次に例を示します。
MKL_DOMAIN_ALL 2 : MKL_DOMAIN_BLAS 1 : MKL_DOMAIN_FFT 4
MKL_DOMAIN_ALL=2 : MKL_DOMAIN_BLAS=1 : MKL_DOMAIN_FFT=4
MKL_DOMAIN_ALL=2, MKL_DOMAIN_BLAS=1, MKL_DOMAIN_FFT=4
MKL_DOMAIN_ALL=2; MKL_DOMAIN_BLAS=1; MKL_DOMAIN_FFT=4
MKL_DOMAIN_ALL = 2 MKL_DOMAIN_BLAS 1 , MKL_DOMAIN_FFT 4
MKL_DOMAIN_ALL,2: MKL_DOMAIN_BLAS 1, MKL_DOMAIN_FFT,4 .
グローバル変数 MKL_DOMAIN_ALL、MKL_DOMAIN_BLAS、MKL_DOMAIN_FFT、MKL_DOMAIN_VML、 MKL_DOMAIN_PARDISO、およびインテル® MKL スレッド化コントロール関数用のインターフェイスは、mkl.h ヘッダーファイルに記述されています。
以下の表は、MKL_DOMAIN_NUM_THREADS の値がどのように解釈されるかを示しています。
MKL_DOMAIN_NUM_THREADS の値 |
解釈 |
---|---|
MKL_DOMAIN_ALL=4 |
インテル® MKL のすべての部分で 4 つの OpenMP* スレッドを使用しようとします。実際のスレッド数は、MKL_DYNAMIC の設定やシステムリソースの状況に応じて異なります。この設定は、MKL_NUM_THREADS = 4 と等価です。 |
MKL_DOMAIN_ALL=1, MKL_DOMAIN_BLAS=4 |
BLAS で 4 つのスレッドを使用することを除いて、インテル® MKL のすべての部分で 1 つの OpenMP* スレッドを使用しようとします。 |
MKL_DOMAIN_VML=2 |
VM で 2 つ OpenMP* のスレッドを使用しようとします。設定は、インテル® MKL のほかの部分には影響しません。 |
ドメイン固有の設定は、ほかの設定よりも優先されることに注意してください。例えば、MKL_DOMAIN_NUM_THREADS が "MKL_DOMAIN_BLAS=4" に設定された場合、MKL_NUM_THREADS の設定に関係なく、BLAS で 4 つの OpenMP* スレッドを使用するように推奨します。関数呼び出し "mkl_domain_set_num_threads ( 4, MKL_DOMAIN_BLAS );" も、mkl_set_num_threads() への呼び出しに関係なく、BLAS で 4 つの OpenMP* スレッドを使用するように推奨します。
しかし、"mkl_domain_set_num_threads (4, MKL_DOMAIN_ALL);" のように、"MKL_DOMAIN_ALL" が入力の関数呼び出しは、"mkl_set_num_threads(4)" と等価であるため、後の mkl_set_num_threads 呼び出しで上書きされることに注意してください。同様に、"MKL_DOMAIN_ALL=4" の MKL_DOMAIN_NUM_THREADS は MKL_NUM_THREADS = 2 で上書きされます。
例えば、MKL_DOMAIN_NUM_THREADS 環境変数では、"MKL_DOMAIN_BLAS=4,MKL_DOMAIN_FFT=2" のように複数の変数を一度に設定することができますが、対応する関数で文字列構文は使用できません。このため、関数呼び出しで同じことを行うには、以下のように複数の呼び出しを行う必要があります。
mkl_domain_set_num_threads ( 4, MKL_DOMAIN_BLAS );
mkl_domain_set_num_threads ( 2, MKL_DOMAIN_FFT );