MKL_DYNAMIC 環境変数は、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) がスレッド数を動的に変更できるようにします。
OMP_DYNAMIC のデフォルト値が FALSE の場合でも、MKL_DYNAMIC のデフォルト値は TRUE です。
MKL_DYNAMIC が TRUE の場合、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は指定された最大数よりも少ない OpenMP* スレッド を使用することがあります。
例えば、MKL_DYNAMIC が TRUE の場合、以下のようなケースでは最適なスレッド数が選択されます:
物理コア数を超えるスレッド数が要求された場合 (インテル® ハイパースレッディング (HT) テクノロジーを使用する場合など)、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は OpenMP* スレッド数を物理コア数の値にスケールダウンします。
検出されたメッセージ・パッシング・インターフェイス (MPI) がスレッドセーフ・モードで呼び出されているかどうか不明な場合、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は 1 つの OpenMP* スレッドを実行します。
MKL_DYNAMIC が FALSE の場合、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、基盤となるアルゴリズムが許可する場合は常に推奨される OpenMP* スレッド数を使用します。たとえば、サイズ 1 の行列対行列の乗算を 8 スレッドで実行しようとすると、このイベントで 8 スレッドを使用することは非現実的であるため、ライブラリーは単一のスレッドのみを使用することを選択する場合があります。
プログラム内の OpenMP* 並列領域からインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) が呼び出される場合、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) はデフォルトで単一のスレッドのみを使用します。このような呼び出しでインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) を並列に実行するには、プログラムをインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) でサポートされる OpenMP* スレッド RTL にリンクし、次のように環境変数を設定します。
このように設定すると、プログラムの OpenMP* 並列領域で呼び出されたインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) は、MKL_NUM_THREADS を使用します。
一般に、ライブラリーが並列セクションからすでに呼び出されていて、入れ子の並列処理を使用する場合などインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) が検出できない状況でのみ、MKL_DYNAMIC を FALSE に設定してください。
製品および性能に関する情報 |
|---|
性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。 改訂 #20201201 |