support

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
PEの例

注目するのは、allocation_rule です。以下のような値を取ります。

$fill_upできるだけ多くのスロットが1 台のサーバー上で確保されるようにスロットを割り当てます。複数のサーバーを使用する場合もそれぞれのサーバーで最大限のスロットが確保されます。
$roundrobinジョブ実行の条件に適うサーバーのそれぞれについて、順番に1 スロットずつランクが割り当てられます。
$pe_slots必ず1 台のサーバー上で指定されたスロットが確保されます。OpenMP を利用したジョブに使用されます。
[整数値]ジョブ実行の条件に適うサーバーのそれぞれについて、[整数値]で指定したスロットが必ず確保されます。Hybrid-MPI の実行に適しています。
allocation_rule
ジョブスクリプトの例 – MPIジョブ
!/bin/bash
$ -cwd           # カレントワークディレクトリの指定
$ -q all.q          # キューの指定
$ -pe mpi 64         # PE の指定 peのあとにジョブに割り当てる全体のスロット数を記述します。
mpirun -np $NSLOTS hostname   #プログラムの実行
「$NSLOTS」は、pe で指定したスロット数が指定されます。
MPIジョブのスクリプト例
ジョブスクリプトの例 – OpenMPジョブ
!/bin/bash
$ -cwd           # カレントワークディレクトリの指定
$ -q all.q          # キューの指定
$ -pe smp 8          # PE の指定 peのあとにジョブに割り当てる全体のスロット数を記述します。

export OMP_NUM_THREADS=$NSLOTS
./program           #プログラムの実行
OpenMPジョブのスクリプト例