#!/bin/bash ## 下载调试此脚本应将中文注释删去,否则可能会有兼容性问题 ## ## 提交任务的名称 #PBS -N atktest ## 根据系统提供的队列名设置(这里是low) #PBS -q low ## 请求计算资源(示例为请求4个节点,每节点20个核) #PBS -l nodes=4:ppn=20 ## 导出环境变量 #PBS -V ## 将out和err合并输出 #PBS -j oe ##--------------------------------------------------------- ## 设置输入文件的名称 SCRIPT=atktest.py ##--------------------------------------------------------- ##修改路径以适配系统 ATK_BIN_DIR=/your/route/to/QuantumWise/VNL-ATK-2014.2/bin/ MPI_DIR=/your/route/to/mpich-3.1.4/ export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH export PATH=$MPI_DIR/bin:$PATH ## 通知计算时需要访问的License server所在位置或自动搜索 export QUANTUM_LICENSE_PATH="6200@管理节点主机名或IP" cd $PBS_O_WORKDIR #创建hostfile cat $PBS_NODEFILE > hostile.$PBS_JOBID echo ------------------------------------------------------ echo 'Job is running on node(s): ' cat hostile.$PBS_JOBID echo ------------------------------------------------------ echo PBS: qsub is running on $PBS_O_HOST echo PBS: originating queue is $PBS_O_QUEUE echo PBS: executing queue is $PBS_QUEUE echo PBS: execution mode is $PBS_ENVIRONMENT echo PBS: current home directory is $PBS_O_HOME echo PBS: working directory is $PBS_O_WORKDIR echo PBS: job name is $PBS_JOBNAME echo PBS: job identifier is $PBS_JOBID echo PBS: PATH = $PBS_O_PATH echo PBS: node file is $PBS_NODEFILE echo ------------------------------------------------------ ############################################################# ## 三种并行方案,使用时选择一种,并去掉相应的“#” ############################################################# ## 方案 1: 每计算核心上安排一个MPI进程(适用于小体系计算) ## 将启动的MPI进程总数为NP #NP=$( sort $PBS_NODEFILE | wc -l ) ## 每个节点上分配的MPI进程数(需要Linux支持bc计算器命令) #N_PER_NODE=`$( sort $PBS_NODEFILE | wc -l ) / $( sort $PBS_NODEFILE | uniq | wc -l ) |bc` ## 关闭MKL的OpenMP线程 #export OMP_NUM_THREADS=1 #export MKL_NUM_THREADS=1 #export MKL_DYNAMIC=FALSE ## 方案 2: 每路CPU上安排一个MPI进程,适用于中等体系计算 ## 例如:在开头的资源请求行设置4个节点,假设每个节点有二路CPU,则: ## 总MPI进程数NP #NP=8 ## 每个节点上MPI进程数(每个节点上的CPU数)N_PER_NODE #N_PER_NODE=2 ## 默认使用OpenMP ## 方案 3: 每个节点一个MPI进程,适用于超大体系计算 ## 总MPI进程数NP #NP=$( sort $PBS_NODEFILE | uniq | wc -l ) ## 每个节点上一个进程 #N_PER_NODE=1 ## 默认使用OpenMP ## 并行计算命令 $MPI_DIR/bin/mpirun -ppn $N_PER_NODE -np $NP -f hostfile.$PBS_JOBID $ATK_BIN_DIR/atkpython $SCRIPT > ${PBS_JOBNAME}.out