OpenMP(Open Multi-Processing)是一种共享内存方式的多线程并行编程技术;MPI(Message Passing Interface)是一种信息传递的并行编程技术,MPI不需要共享内存。OpenMP的特点是单节点、进程内、多线程、基于共享内存的并行运算;MPI的特点是单或多节点、进程间、非共享内存、基于消息传递的并行运算。

  混合并行编程模型构建的应用程序可以同时使用OpenMP和MPI,节点内进程内使用OpenMP共享内存并行可降低内存需求,跨节点跨进程使用MPI消息传递可大规模并行,这样的作业提交有如下注意事项:

  1. #BSUB -n 指定的仍然是使用的总CPU Cores数量
  2. 提交作业脚本中需要在计算命令前首先运行
    source /fs00/software/lsf/misc/ompthreads.sh [N]
  3. 每个MPI进程的OpenMP线程数量可以用环境变量OMP_NUM_THREADS指定或上述命令行参数指定,同时指定时命令行参数优先,需要保证每个节点的CPU Cores可以被线程数整除!

  例:每个MPI进程跑6个OpenMP线程

通过环境变量OMP_NUM_THREADS指定

#BSUB -q 6140ib
#BSUB -n 72
export OMP_NUM_THREADS=6
source /fs00/software/lsf/misc/ompthreads.sh
module load ips/2018u4
mpirun ./run

 通过命令行参数指定,有些计算程序需要通过命令行参数指定线程数量

#BSUB -q 6140ib
#BSUB -n 72
source /fs00/software/lsf/misc/ompthreads.sh 6
module load ips/2018u4
mpirun ./openmx -nt 6