mpi简介
1.MPI全称是message passing interface,即信息传递接口,是用于跨节点通讯的基础软件环境。它提供让相关进程之间进行通信,同步等操作的API,可以说是并行计算居家出游必备的基础库。
一个 MPI 程序包含若干个进程。每个 mpi 进程都运行一份相同的代码,进程的行为由通讯域(communication world)和该通讯域下的 id(rank id)所决定。
MPI的编程方式,是“一处代码,多处执行”。编写过多线程的人应该能够理解,就是同样的代码,不同的进程执行不同的路径。
2.它是一个库,不是一门语言。可以被fortran,c,c++等调用。MPI允许静态任务调度,显示并行提供了良好的性能和移植性,用MPI编写的程序可直接在多核集群上运行。在集群系统中,集群的各节点之间可以采用 MPI 编程模型进行程序设计,每个节点都有自己的内存,可以对本地的指令和数据直接进行访问,各节点之间通过互联网络进行消息传递,这样设计具有很好的可移植性,完备的异步通信功能,较强的可扩展性等优点。
3.MPI常用命令
对于登录集群计算而言,我们只需要掌握两种mpi运行指令即可,它们分别是:mpirun
、mpiexec
。
简而言之mpirun
和mpiexec
均是MPI程序运行命令:
mpirun
:MPI程序快速执行命令,运行前不必运行mpdboot开启守护进程。mpiexec
:MPI程序运行命令,运行前必须开启mpd守护进程。
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
简单来说,在服务器配置良好的情况下,绝大多数情况不需要考虑选项的配置,基本语句如下:
mpirun -n 20 vasp_std
//20核心并行vasp_std程序,vasp_std需要加入环境变量
mpiexec.hydra -n 20 vasp_std
//20核心并行vasp_std程序,vasp_std需要加入环境变量
此时节点和核心的分配完全由PBS系统进行分配,跨节点运行时也会自动进行核心和节点的匹配
另外,在实际操作过程中,我发现部分同学对于PBS和mpirun -np
的作用可能不太理解,在这里想简单解释如下:
- PBS是作业分配系统,通过.pbs脚本像PBS作业管理软件申请相应的核心数量和节点数量。
- 但要注意,这并不意味着通过分配的作业会完全按照申请的资源运行。下面看一个小小的例子:
1
|
#PBS -l nodes=2:ppn=20
|
这意味着#PBS -l
命令部分决定问集群申请多少计算资源。