このページの更新は終了しました。

最新の情報はTSUBAME3.0計算サービスのWebページをご覧ください。

TSUBAME2.5からTSUBAME3.0へのデータ移行方法の資料はこちら

MPI, MPI+OpenMPプログラムをバッチ投入するときのt2subオプションの指定方法がわかりません(2014.10.17更新)

MPI, MPI+OpenMPジョブファイル 

まず、以下のようなジョブファイルを用意してください。

#! /bin/sh

MPI_PROCS=`wc -l $PBS_NODEFILE | awk '{print $1}'`

echo '---------- Properties ----------'
echo "Job ID:              $PBS_JOBID"
echo "# of MPI Processses: $MPI_PROCS"
echo "MPI Node File"
sed s/^/'\t'/ $PBS_NODEFILE
echo "# of OpenMP Threads: $OMP_NUM_THREADS"
echo '--------------------------------'

cd $HOME/t2_jobs/job01
mpirun -n $MPI_PROCS -x OMP_NUM_THREADS=$OMP_NUM_THREADS -hostfile $PBS_NODEFILE ./program

$PBS_NODEFILEはt2subのselect, mpiprocs等を元に自動生成されるMPIノードファイルです。$OMP_NUM_THREADSはOpenMPのスレッド数を表し、t2subのncpusオプションの値がセットされます。ncpusオプションを指定しない場合、$OMP_NUM_THREADSには1がセットされます。ジョブファイルの先頭でこれらを値を確認するために表示しています。

mpirunのオプション「-n $MPI_PROCS」で$PBS_NODEFILEに記述された全てのノード数分のMPIプロセスを起動することを指定しています。任意の数のMPIプロセスを起動する場合は「-n PROC_NUM」と指定してください。

「-x OMP_NUM_THREADS=$OMP_NUM_THREADS」では、各MPIプロセスが使用するOpenMPスレッド数を指定します。
この例は、openmpi を使用しています。TSUBAME2では、他のmpiも選択できます。
この部分を、使用するMPIに合わせて環境変数の追記と共に以下に修正してください。
mvapich2の場合は 
     SP3(2014.8~)環境では特別な指定は必要ありません。
SP1(L系)では以下の指定をしてください。
     「VIADEV_USE_AFFINITY=0 OMP_NUM_THREADS=$OMP_NUM_THREADS」
mpich2の場合は(Vキューはこちらを使用します)
     SP3(2014.8~)環境では特別な指定は必要ありません)
     SP1(L系)では以下の指定をしてください。
     「-env OMP_NUM_THREADS=$OMP_NUM_THREADS」

「-hostfile $PBS_NODEFILE」で、$PBS_NODEFILEに記述されたホスト上でMPIプロセスを起動することを指定します。

Nノード使用、1ノードあたり1MPIプロセス => 全体でN MPIプロセス

t2sub -q S -l select=N:mpiprocs=1 -l place=scatter job.sh

Nノード使用、1ノードあたり1MPIプロセス、1MPIプロセスあたりTスレッド => 全体で N MPIプロセス、 NxTスレッド

t2sub -q S -l select=N:mpiprocs=1:ncpus=T -l place=scatter job.sh

Nノード使用、1ノードあたりM MPIプロセス => 全体で NxM MPIプロセス

t2sub -q S -l select=N:mpiprocs=M -l place=scatter job.sh

Nノード使用、1ノードあたりM MPIプロセス、1MPIプロセスあたりTスレッド => 全体で NxM MPIプロセス、NxMxTスレッド

t2sub -q S -l select=N:mpiprocs=M:ncpus=T -l place=scatter job.sh