【摘要】本文主要通过一个算例来详细描述 PBS 脚本。以下为提交 wrf 作业的脚本实例,解释说明部分用##开头和结尾。此 PBS脚本表明本次提交的作业申请计算资源为 2 个计算节点,每个计算节点 12 个 cpu 核,内存为 24G,其中红色部分,用户可根据具体需要进行修改。
#PBS -N wrf
##(#PBS 表示 PBS 指令,以#PBS 开头;-N 为 PBS 指令参数,用于指定提交作业名称,wrf 表示作业名)。##
#PBS -l nodes=2:ppn=12
##(#PBS 表示 PBS 指令,-l 为 PBS 指令参数,表示申请资源列表;nodes=2:ppn=12 表示申请 2 个节点,每个节点 12 个 cpu 核,之间用分号隔开。注意与输入文件保持一致)##
#PBS -j oe
##(#PBS 表示 PBS 指令,-j 为 PBS 指令参数,表示合并标准输出和标准错误输出至同一个文件;o 表示标准输出文件的路径,e 表示标准错误输出的路径,缺省的情况下,PBS 系统把标准输出和标准错误输出放在用户提交作业的目录下。)##
#PBS -l walltime=1000:00:00
##(#PBS 表示 PBS 指令,-l 为 PBS 指令参数,表示申请资源列表;walltime 为估计最大运算时间,1000:00:00 表示设为 1000 小时 0 分 0 秒。若没有设置这项,系统会自动按所在队列默认处理,超时系统会自动中断作业。)##
nodecpu=`cat /proc/cpuinfo|grep processor|wc -l`
## (反引号内的意思为计算系统可用的 cpu 核数目,然后赋值给变量 nodecpu。反引号即键盘左上角与“~”在同一键上的符号,英文为 Backquote)##
id=`echo $PBS_JOBID|awk -F. '{print $1}'` ##(定义作业 ID 号)##
NP=`cat $PBS_NODEFILE|wc -l` ##(计算申请的 cpu 核数目,并后赋值给变量 NP)##
echo "The Jobbed is $id"
echo "Worker dir is $PBS_O_WORKDIR"
echo "Excuting Hosts is flowing:"
cat $PBS_NODEFILE
echo "begin time is `date`"
if [ $NP -lt $nodecpu ];then
sharecpu=$NP
elif [ $(($NP%$nodecpu)) == 0 ];then
sharecpu=$nodecpu
else
echo "Error: if cpu number is larger than $nodecpu,
it should can be divided by $nodecpu exactly !!"
exit -1
fi
##(这段为 if...elif; then 选择语句,意思是当所需的 cpu 核个数小于系统可调用的 cpu 核数时,调用计算所需的 cpu 核个数。否则......)##
cd $PBS_O_WORKDIR ## (进入工作目录) ##
mpirun -np $NP -hostfile $PBS_NODEFILE (绝对路径)/ wrf.exe下载本文