OpenMP(Open Multi-Processing)是一种共享内存方式的多线程并行编程技术;MPI(Message Passing Interface)是一种信息传递的并行编程技术,MPI不需要共享内存。OpenMP的特点是单节点、进程内、多线程、基于共享内存的并行运算;MPI的特点是单或多节点、进程间、非共享内存、基于消息传递的并行运算。
混合并行编程模型构建的应用程序可以同时使用OpenMP和MPI,节点内进程内使用OpenMP共享内存并行可降低内存需求,跨节点跨进程使用MPI消息传递可大规模并行,这样的作业提交有如下注意事项:
- #BSUB -n 指定的仍然是使用的总CPU Cores数量
- 提交作业脚本中需要在计算命令前首先运行
source /fs00/software/lsf/misc/ompthreads.sh [N] - 每个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