1 オプション

#$ -S /bin/sh
#$ -cwd       #ジョブの標準出力、エラー出力をcwd上に出力
#$ -o stdout  #標準出力リダイレクト先ファイル名
#$ -e stderr  #標準エラー出力リダイレクト先ファイル名
#$ -q Ga.q    #キュー
#$ -pe Ga.mpich2 4    #PE と並列実行プロセス数

-q と -pe オプションは、指定していなければ、 空いているキューで適当に計算するようだ。 ただし、現状の Kr シリーズのように、 2プロセス走らせた方が効率が良い場合でも自動的に 2 プロセスで走らせてくれたりは しない。

2 環境変数

see Documentation Home > Sun N1 Grid Engine 6.1 ユーザーズガイド > 第 3 章 ジョブの発行 > バッチジョブの発行 の環境変数

2.1 NHOSTS, NSLOTS

4 プロセス/ホストで 1ホスト、合計4プロセス計算の条件だと、

2.2 PE_HOSTFILE

環境変数 PE_HOSTFILE はたとえば、 /var/spool/gridengine/execd/Ga01/active_jobs/90.1/pe_hostfile というようなパスが入っている。 このパスのファイルを開くと、 Ga01.calc.atom 4 Ga.q@Ga01.calc.atom UNDEFINED Ga02.calc.atom 4 Ga.q@Ga02.calc.atom UNDEFINED のように使用ホストが並んでいる。 この情報が -machinefile に使えそうだが、 このまま mpich2 の mpdboot に食わせても以下のようなエラーになる。

Traceback (most recent call last):
  File "/opt/mpich2/bin/mpdboot", line 482, in <module>
    mpdboot()
  File "/opt/mpich2/bin/mpdboot", line 234, in mpdboot
    (k,v) = kv.split('=',1)
ValueError: need more than 1 value to unpack

cut, sed コマンドを使って修正してやれば良い。

% cat pe_hostfile
Ga06.calc.atom 1 Ga.q@Ga06.calc.atom UNDEFINED
Ga07.calc.atom 1 Ga.q@Ga07.calc.atom UNDEFINED

% cut -d " " -f 1,2 pe_hostfile | sed 's/ /:/'
Ga06.calc.atom:1
Ga07.calc.atom:1

cut コマンドでフィールドを区切る。 -d オプションで区切り文字を " " に指定し、 -f オプションでその第1, 2要素を表示している。

この出力をパイプで sed に渡し、 " " を ":" に置換している。

3 サンプル: sleep100-pe1.qsub

#! /bin/sh
#$ -S /bin/sh
#$ -cwd
#$ -q Ga.q
#$ -pe Ga.mpich2 1

printenv
sleep 100

pe の数をかえたりして、 ジョブを投げたときの挙動の確認など。 100 秒程度の時間があれば、/var/spool/gridengine/execd/... のファイルを確認できたりする。 printenv しているので、セットされている環境変数を確認できる。