まず第一に、BSUB
センチネルの前には 1 つの#
記号を付ける必要があります。そうしないと、通常のコメントとしてスキップされます。
古い LSF バージョンでハイブリッド ジョブを開始する正しい方法は、span
リソース要求と要求ノードを排他的に渡すことです。それぞれ 8 つの MPI プロセスと 8 つの OpenMP スレッドでジョブを開始するには、次を使用する必要があります。
#BSUB -n 8
#BSUB -x
#BSUB -R "span[ptile=2]"
パラメータは次のとおりです。
-n 8
- MPI プロセス用に 8 スロットを要求する
-x
- 排他的にノードをリクエスト
-R "span[ptile=2]"
- ノードごとに 2 つのスロットにわたってジョブをスパンするように LSF に指示します。
ノードを排他的に要求する必要があります。そうしないと、ノードごとに 2 つのスロットしか使用されないため、LSF は他のジョブを同じノードにスケジュールします。
次に、OMP_NUM_THREADS
環境変数を4
(ソケットあたりのコア数) に設定し、MPI ライブラリにその変数を MPI プロセスに渡すように指示し、ライブラリが各 MPI プロセスを独自の CPU ソケットに制限するようにする必要があります。残念ながら、これは非常に実装固有です。たとえば、次のようになります。
MPI 1.6.x 以前を開く:
export OMP_NUM_THREADS=4
mpiexec -x OMP_NUM_THREADS --bind-to-socket --bysocket ./program.exe
MPI 1.7.x 以降を開きます。
export OMP_NUM_THREADS=4
mpiexec -x OMP_NUM_THREADS --bind-to socket --map-by socket ./program.exe
Intel MPI (IMPI をあまり使用しないため、これについてはよくわかりません):
mpiexec -genv OMP_NUM_THREADS 4 -genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN socket -genv I_MPI_PIN_ORDER scatter \
./program.exe