< 目次

OpenMP* スレッド数の設定

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

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

注意

例えば、ノードあたりの MPI ランクの数とノードあたりの OpenMP* スレッド数の両方が 1 よりも大きい場合、OpenMP* スレッド数が過剰に指定されないようにします。ノードあたりの MPI ランクの数とノードあたりの OpenMP* スレッド数の積が、ノードあたりのハードウェア・スレッド数を超えないようにしてください。

ログイン環境で OMP_NUM_THREADS のような環境変数を設定する場合、mpirun はすべてのノードでデフォルトシェルを開始するため、共有メモリー (SMP) システムのヘッドノードでこの値を変更しても、すべてのノードの変数は変更されないことに注意してください。すべてのノードの OpenMP* スレッド数を変更するには、.bashrc で、以下のように先頭に行を追加します。

set OMP_NUM_THREADS=1; export OMP_NUM_THREADS

MPICH を使用してノードごとに複数の CPU を実行できます。そのためには、ノードごとに複数の CPU を利用できるように MPICH をビルドする必要があります。特定の MPICH アプリケーションはスレッド化環境では正常に動作しない場合があることに注意してください (リリースノートの「既知の制限事項」セクションを参照)。MPICH で 1 よりも大きな OpenMP* スレッド数を設定したときに問題が発生した場合は、まずスレッド数を 1 に設定して問題が解消するかどうか確認してください。

重要

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

関連情報