#!/bin/sh
#PBS -q chem                 <-- 使用するqueue名
#PBS -l nodes=3:ppn=2        <-- そのqueueのリソースの中で使用するノードの数と1ノード当たりで使用するcoreの数
#PBS -j oe                   <-- 結果を標準出力、標準エラーともに出力する場合oe
#PBS -N sample jobs          <-- qstat 時に「Name」欄に表示される名称。ただし先頭から空白まで
 
# start time
/usr/bin/date '+%y%m%d %H%M%S'
SECONDS=0
 
$PBS_O_WORKDIR              <-- 計算を実施する場所に移って
export LD_LIBRARY_PATH=/Appl/relion/lib:/Appl/local/openmpi-1.10_gcc-4.8/lib    <-- 環境変数を定義
 
mpirun -np 4   .....        <-- 実際の計算内容
 
# end time
/usr/bin/date '+%y%m%d %H%M%S'
echo $SECONDS Seconds       <-- このスクリプトの処理に掛かった時間を示します
printf "%02d:%02d:%02d\n" $(($SECONDS/3600)) $((($SECONDS%3600)/60)) $(($SECONDS%60))  <-- 経過時間を「HH:MM:SS」で表記

array job

#!/bin/sh
#PBS -q chem
#PBS -l nodes=3:ppn=2
#PBS -j oe
# start time
/usr/bin/date '+%y%m%d %H%M%S'
 
$PBS_O_WORKDIR
export LD_LIBRARY_PATH=/Appl/relion/lib:/Appl/local/openmpi-1.10_gcc-4.8/lib
 
mpirun -np 4   .....   $PBS_ARRAYID
 
# end time
/usr/bin/date '+%y%m%d %H%M%S'

「qsub -t 0,1,2,3 script.sh」
発行されるジョブは一つであるが、スクリプト中の$PBS_ARRAYID に「0」が入った計算を行った後に、
「1」の入った計算、「2」の入った計算「3」の値が入った計算と連続的に行う(数字のみ扱える)

単純にスクリプトの中に for loopを用いればいいのかも知れませんが、上記に従うと特定の変数に対して
qalter(ジョブの変更)、qdel(ジョブのkill)、qhold(ジョブの一時停止)、qrls(ジョブの再開)らが可能
「qdel 1999[1].c」とか

変数

#!/bin/sh
#PBS -q chem
#PBS -l nodes=3:ppn=2
#PBS -j oe
# start time
/usr/bin/date '+%y%m%d %H%M%S'
 
$PBS_O_WORKDIR
export LD_LIBRARY_PATH=/Appl/relion/lib:/Appl/local/openmpi-1.10_gcc-4.8/lib
 
mpirun -np 4   .....   ${IN}  ${OUT}
 
# end time
/usr/bin/date '+%y%m%d %H%M%S'

「qsub script.sh -t IN=input.dat,OUT=out.txt」
「-t」を用いることでスクリプト内の変数に値を入られてます。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-09-12 (火) 08:07:42 (1230d)