< 目次

OpenMP* スレッド数の判断

OpenMP* ランタイム・ライブラリーは、OMP_NUM_THREADS 環境変数を使用します。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) には、MKL_NUM_THREADSMKL_DOMAIN_NUM_THREADS 環境変数のような、OpenMP* スレッド数を設定するほかの方法も用意されています (追加のスレッド制御を使用を参照)。

すべてのノードで関連する環境変数が正しい値 (同じ値) になっていることを確認します。インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) では、 OpenMP* スレッド数のデフォルトは 1 に設定されません。コンパイラーで使用される OpenMP* ライブラリーに応じて、デフォルトのスレッド数が設定されます。インテル® コンパイラー・ベースのスレッド・ライブラリー (mkl_intel_thread.lib) では、この値は OS の CPU の数です。

注意

たとえば、ノードあたりの MPI ランク数とノードあたりの OpenMP* スレッド数が両方とも 1 より大きい場合に発生する可能性がある、OpenMP スレッド数の過剰指定を避けてください。ノードあたりの MPI ランク数にノードあたりの OpenMP* スレッド数を掛けた数が、ノードあたりのハードウェア・スレッド数を超えてはなりません。

以下の説明では、OMP_NUM_THREADS 環境変数が前提となっています。

OMP_NUM_THREADS を、その値とノードあたりの MPI ランク数の積がノードの実際のプロセッサー数またはコア数と等しくなるように設定します。ノードでインテル® ハイパースレッディング・テクノロジーが有効になっている場合、Windows* で表示されるプロセッサー数の半分だけを使用します。

重要

クラスター・スパース・ソルバーでは、ソルバーの実装ではマルチスレッド・アルゴリズムのみがサポートされるため、OpenMP* スレッド数を 1 より大きい数に設定します。

関連情報