menu

ジョブスクリプト例

ジョブスクリプト

ジョブスクリプトはジョブスケジューラに渡すオプション(qsubオプション)部分とコマンド実行部分から構成されます.

  • qsubオプション部分:行の先頭に"#PBS”を記述します. 同じオプションをジョブ投入時に付加することもできます.
  • それ以外の部分:シェルで実行されるコマンドとして扱われます.
  • 各種サンプルスクリプト等はログイン後,/work/Samples以下からコピーしてご利用ください.

ジョブスクリプト例 : 

MPIプログラム(コンパイル済)を実行する

#!/bin/csh                  ← 普段利用しているシェルを指定
#PBS -q DEFAULT              ← 投入先のキューの指定
#PBS -oe                   ← 標準出力,標準エラー出力を一ファイルに出力
#PBS -l select=1:ncpus=16:mpiprocs=16   ← 必要なリソース指定(この例では16CPU, MPI16並列) 
#PBS -N my-job              ← 投入するジョブ名の指定

cd ${PBS_O_WORKDIR}        ← 作業ディレクトリに移動

mpirun -machinefile ${PBS_NODEFILE} -np 16 ./hello_mpi               ← コンパイル済みの実行ファイルを実行

ジョブスクリプトのサンプル

各種ジョブスクリプトのサンプルは以下です.

ログイン後,以下にPBSスクリプトのサンプルを置いていますので手元にコピーしてご利用ください.

kagayaki:/Samples

リソース指定例

利用するリソースをチャンク(chunk)としてカウントします.

PBSで以下のようにリソースを指定すると,デフォルトでは1チャンク16CPU Core を取得します.
1CPU=64Coreなので,ncpusに指定する数は16の倍数が推奨です.
# 64でも構いませんが,シリアルプログラムの場合は配分されるリソースが過剰になります

#PBS -l select=1:ncpus=16

以下のようにリソースを指定した場合,チャンクサイズが変わります.この例では32CPU Coreを1チャンクとして2チャンク64CPU Coreを取得します.

#PBS -l select=2:ncpus=32

MPIジョブ

1/2CPU (32CPU Core, 128GBメモリ), 1/4ノードを利用した32並列のMPIジョブ

#!/bin/csh
#PBS -l select=2:ncpus=16:mpiprocs=16
#PBS -j oe
#PBS -N MPI-job

cd $PBS_O_WORKDIR

mpirun -machinefile ${PBS_NODEFILE} -np 32 ./hello_mpi

2CPU (128CPU Core, 512GBメモリ), 1ノード分使用するがMPI並列数は64本のみ

#!/bin/csh
#PBS -l select=8:ncpus=16:mpiprocs=8
#PBS -j oe
#PBS -N MPI-job

cd $PBS_O_WORKDIR

mpirun -machinefile ${PBS_NODEFILE} -np 64 ./hello_mpi

OpenMPジョブ

1/2CPU (32CPU Core)を利用した32並列のOpenMPジョブ

#!/bin/csh
#PBS -l select=2:ncpus=16
#PBS -j oe
#PBS -N OpenMP-job

cd $PBS_O_WORKDIR
setenv OMP_NUM_THREADS 32

./a.out

Hybrid(MPI+OpenMP)ジョブ

1CPU (64CPU Core) を利用し, 16Coreにつき8(MPI)プロセスx2(OpenMP)スレッド

#!/bin/bash
#PBS -l select=4:ncpus=16:mpiprocs=8   <-- 16CPU Coreにつき8MPIプロセス
#PBS -j oe
#PBS -N hybrid-job

cd $PBS_O_WORKDIR

export OMP_NUM_THREADS=2    <-- 1プロセスにつき2スレッド

mpirun -machinefile ${PBS_NODEFILE} -np 32 ./hello_hyb <-- 32MPIプロセス生成

2CPU (128CPU Core) を利用し, 64Coreにつき32(MPI)プロセスx2(OpenMP)スレッド

#!/bin/bash
#PBS -l select=8:ncpus=16:mpiprocs=4   <-- 全128CPU, 16CPUにつき4MPIプロセス
#PBS -j oe
#PBS -N hybrid-job

cd $PBS_O_WORKDIR

export OMP_NUM_THREADS=4    <-- 1プロセスにつき4スレッド

mpirun -machinefile ${PBS_NODEFILE} -np 32 ./hello_hyb <-- 32MPIプロセス生成