Altair Grid Engine (AGE)上で並列ジョブを実行する場合、そのプロセスを複数ノードにまたがるスロットに割り当てる必要があります。ホストごとのプロセス数の指定など、様々なポリシーで要求されるスロットに対して、UGEがそれを確保する仕組みとしてPE(Parallel Environment)があります。システムで利用できるPE は、「qconf -spl」コマンドで確認できます。「qconf -sp pe_name」とすると、PE の詳細が確認できます。MPI の実装ごとに異なるPE が作成される場合があるので注意が必要です。ここでは、mpi というPEが以下のような定義であったと仮定します。
qconf -sp mpi pe_name mpi slots 999999 used_slots 0 bound_slots 0 user_lists NONE xuser_lists NONE start_proc_args $sge_root/mpi/startmpi.sh $pe_hostfile stop_proc_args $sge_root/mpi/stopmpi.sh allocation_rule $fill_up control_slaves TRUE job_is_first_task FALSE urgency_slots min accounting_summary TRUE daemon_forks_slaves TRUE master_forks_slaves FALSE |
注目するのは、allocation_rule です。以下のような値を取ります。
$fill_up | できるだけ多くのスロットが1 台のサーバー上で確保されるようにスロットを割り当てます。複数のサーバーを使用する場合もそれぞれのサーバーで最大限のスロットが確保されます。 |
$roundrobin | ジョブ実行の条件に適うサーバーのそれぞれについて、順番に1 スロットずつランクが割り当てられます。 |
$pe_slots | 必ず1 台のサーバー上で指定されたスロットが確保されます。OpenMP を利用したジョブに使用されます。 |
[整数値] | ジョブ実行の条件に適うサーバーのそれぞれについて、[整数値]で指定したスロットが必ず確保されます。Hybrid-MPI の実行に適しています。 |
ジョブスクリプトの例 – MPIジョブ
!/bin/bash $ -cwd # カレントワークディレクトリの指定 $ -q all.q # キューの指定 $ -pe mpi 64 # PE の指定 peのあとにジョブに割り当てる全体のスロット数を記述します。 mpirun -np $NSLOTS hostname #プログラムの実行 「$NSLOTS」は、pe で指定したスロット数が指定されます。 |
ジョブスクリプトの例 – OpenMPジョブ
!/bin/bash $ -cwd # カレントワークディレクトリの指定 $ -q all.q # キューの指定 $ -pe smp 8 # PE の指定 peのあとにジョブに割り当てる全体のスロット数を記述します。 export OMP_NUM_THREADS=$NSLOTS ./program #プログラムの実行 |