MKL_DYNAMIC 環境変数は、インテル® マス・カーネル・ライブラリー (インテル® MKL) がスレッド数を動的に変更できるようにします。
MKL_DYNAMIC のデフォルト値は、OMP_DYNAMIC のデフォルト値が FALSE の場合でも、TRUE です。
MKL_DYNAMIC が TRUE の場合、インテル® MKL は、ユーザーが指定した最大値までの範囲で、最良とみなすスレッド数を使用しようとします。
例えば、MKL_DYNAMIC が TRUE の場合、以下のようなケースでは最適なスレッド数が選択されます。
要求されたスレッド数が (ハイパースレッディングなどにより) 物理コアの数を超えていて、MKL_DYNAMIC がデフォルト値の TRUE から変更されていない場合、インテル® MKL はスレッド数を物理コアの数まで下げます。
MPI が使用されていて、スレッドセーフ・モードで呼び出されているかどうか判断できない場合 (例えば、MPICH 1.2.x では検出不可) で、MKL_DYNAMIC がデフォルト値の TRUE から変更されていない場合、インテル® MKL は 1 つのスレッドを実行します。
MKL_DYNAMIC が FALSE の場合、インテル® MKL は、ユーザーが指定したスレッド数を使用しようとします。 ただし、MKL_DYNAMIC=FALSE を設定しても、例えば、システムリソースの不足など、要求されたスレッド数を選択できない場合、インテル® MKL はそのスレッド数を使用しません。 また、ライブラリーが問題を調査し、推奨値と異なるスレッド数を使用することがあります。例えば、8 つのスレッドでサイズ 1 の行列-行列乗算を行おうとすると、このイベントで 8 つのスレッドを使用することは実用的でないため、ライブラリーは代わりに 1 スレッドのみ使用します。
インテル® MKL が並列領域で呼び出された場合、デフォルトでは 1 つのスレッドのみを使用することにも注意してください。ライブラリーで入れ子の並列処理を使用し、並列領域内のスレッドをインテル® MKL が使用しているものと同じ OpenMP コンパイラーでコンパイルする場合、MKL_DYNAMIC を FALSE にして、スレッド数を手動で設定してください。
一般に、ライブラリーが並列セクションからすでに呼び出されていて入れ子の並列処理を使用する場合など、インテル® MKL が検出できない状況でのみ、MKL_DYNAMIC を FALSE に設定してください。
© 2007 - 2010 Intel Corporation. 無断での引用、転載を禁じます。