インテル® MKL 2017 デベロッパー・ガイド
MKL_DYNAMIC 環境変数は、インテル® MKL がスレッド数を動的に変更できるようにします。
OMP_DYNAMIC のデフォルト値が FALSE の場合でも、MKL_DYNAMIC のデフォルト値は TRUE です。
MKL_DYNAMIC が TRUE の場合、インテル® MKL は指定された最大数よりも少ない OpenMP* スレッド を使用することがあります。
例えば、MKL_DYNAMIC が TRUE の場合、以下のようなケースでは最適なスレッド数が選択されます。
物理コア数を超えるスレッド数が要求された場合 (インテル® ハイパースレッディング (HT) テクノロジーを使用する場合など)、インテル® MKL は OpenMP* スレッド数を物理コア数の値にスケールダウンします。
検出されたメッセージ・パッシング・インターフェイス (MPI) がスレッドセーフ・モードで呼び出されているかどうか不明な場合、インテル® MKL は 1 つの OpenMP* スレッドを実行します。
MKL_DYNAMIC が FALSE の場合、インテル® MKL はアルゴリズムで許可される限り推奨された OpenMP* スレッド数を使用します。例えば、8 つのスレッドでサイズ 1 の行列-行列乗算を行おうとすると、このイベントで 8 つのスレッドを使用することは実用的でないため、ライブラリーは代わりに 1 スレッドのみ使用します。
プログラムの OpenMP* 並列領域から呼び出される場合、インテル® MKL はデフォルトで 1 スレッドのみ使用します。このような呼び出しでインテル® MKL を並列に実行するには、プログラムをインテル® MKL でサポートされる OpenMP* スレッド RTL にリンクし、次のように環境変数を設定します。
このように設定すると、プログラムの OpenMP* 並列領域で呼び出された際に、インテル® MKL は MKL_NUM_THREADS を使用します。
一般に、ライブラリーが並列セクションからすでに呼び出されていて入れ子の並列処理を使用する場合など、インテル® MKL が検出できない状況でのみ、MKL_DYNAMIC を FALSE に設定してください。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |