Relion/qsubのコード修正を加えた時に使えるqsub.shです

恐ろしく汚いコードだけど...

#!/bin/bash
#PBS -q XXXqueueXXX
#PBS -l nodes=XXXnodesXXX:ppn=XXXcoresXXX
#PBS -N XXXnameXXX
#
# mpirun
opt=" --display-map --bind-to none --mca plm_rsh_agent rsh --map-by node "
#
cd $PBS_O_WORKDIR
host=$(cat $PBS_NODEFILE | sort -u | tr "\n" " ")
#
if [ -f /Appl/.relion/XXXversionXXX ]; then
   source /Appl/.relion/XXXversionXXX
fi
#
SECONDS=0
cat <<_EOF_>XXXoutfileXXX
----------------------------------------------
start  `date`
----------------------------------------------
 
Queue 名称                       XXXqueueXXX
実行ノード数                     XXXnodesXXX ($host)
  +--プログラム数[MPI procs]     XXXmpinodesXXX
     +-- スレッド数[threads]     XXXthreadsXXX
           (単体ノード使用コア数 XXXcoresXXX)
`printf "*トータル使用コア数( %d x %d ) --> %d\n" XXXnodesXXX XXXcoresXXX XXXsumXXX`
`printf "*MPI総数( %d x %d ) = %d\n" XXXmpinodesXXX XXXnodesXXX XXXmpiprocXXX`
_EOF_
 
# relion-2のGPU対応「relion_refine_mpi」
cmd_=$(/bin/cat <<_EOF_
XXXcommandXXX
_EOF_
)
cmd=$(echo "$cmd_" | sed -z 's/\n/\&\&/g')
run=$(echo $cmd|awk '{print $1}')
 
cat <<_EOF_>>XXXoutfileXXX
 
use relion:
`readlink -f $run`
----------------------------------------------
_EOF_
 
#
# check np plus 1
np=XXXmpiprocXXX
localnodefile=1
useRelionGpu=1
if [ ${run##*/} =  "relion_refine_mpi" ]; then
   if [[ $cmd = *--gpu* ]]; then
      np=$(expr $np + 1)
      echo "GPU使用のためnp数を変更しました: XXXmpiprocXXX --> $np" >> XXXoutfileXXX
      nodeCount=$(wc -l $PBS_NODEFILE|awk '{print $1}')
      source /Appl/.relion/3.0-beta-2
cmd_=$(/bin/cat <<_EOF_
XXXcommandXXX
_EOF_
)
cmd=$(echo "$cmd_" | sed -z 's/\n/\&\&/g')
run=$(echo $cmd|awk '{print $1}')
 
cat <<_EOF_>>XXXoutfileXXX
 
change relion_refine_mpi path:
`readlink -f $run`
----------------------------------------------
_EOF_
 
      useRelionGpu=2
      if [ $np -gt $nodeCount ]; then
         /bin/cp $PBS_NODEFILE .
         /usr/bin/tail -1 $PBS_NODEFILE >> $(basename $PBS_NODEFILE)
         localnodefile=2
         useRelionGpu=3
      fi
   fi
fi
#
# make command
if [ $localnodefile -eq 1 -a $useRelionGpu -eq 1 ]; then
   command="{ { /Appl/local/openmpi-1.10.7_intel-18.0.2/bin/mpirun $opt --machinefile $PBS_NODEFILE -np $np ${cmd:0:-2} | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3"
elif [ $localnodefile -eq 1 -a $useRelionGpu -eq 2 ]; then
   command="{ { /usr/lib64/openmpi/bin/mpirun                      $opt --machinefile $PBS_NODEFILE -np $np ${cmd:0:-2} | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3"
elif [ $localnodefile -eq 2 -a $useRelionGpu -eq 3 ]; then
   command="{ { /usr/lib64/openmpi/bin/mpirun                      $opt -machinefile $(basename $PBS_NODEFILE) -np $np ${cmd:0:-2} | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3"
fi
 
cat <<_EOF_>>XXXoutfileXXX
 
run command:
$command
----------------------------------------------
_EOF_
 
eval $command
 
if [ -f $(basename $PBS_NODEFILE) ]; then
  /bin/rm -f $(basename $PBS_NODEFILE)
fi
 
cat <<_EOF_>>XXXoutfileXXX
----------------------------------------------
use relion: `readlink -f $run`
end time: `date '+%y%m%d %H:%M:%S'`  (spend  `printf "%02d:%02d:%02d\n" $(($SECONDS/3600)) $((($SECONDS%3600)/60)) $(($SECONDS%60))`)
----------------------------------------------
done
_EOF_

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2018-12-17 (月) 22:05:33 (182d)