1. MPI程序:
SPMD执行模式:一个程序同时启动多份,形成多个独立的进程,在不同的处理机上运行,拥有独立的内存空间,进程间通信通过调用MPI函数来实现;每个进程开始执行时,将获得一个唯一的序号(rank)。例如启动P个进程,序号依次为0,1,…,P-1;
2.MPI重要概念
● 进程号(rank);各进程通过函数MPI_Comm_rank()获取各自的序号;
● 消息标签:消息的标号;
● 通信域(Communicator):1)理解为一类进程的集合,且在该集合内,进程间可以相互通信;类比:邮局、电话局、国际网;2)任何MPI通信函数均必须在某个通信器内发生;3)
MPI系统提供省缺的通信器MPI_COMM_WORLD,所有启动的MPI进程通过调用函数MPI_Init()包含在该通信器内;4)各进程通过函数MPI_Comm_size()获取通信器包含的(初始启动)的MPI进程个数;
● 消息:分为数据(data)和信封(envelope)两个部分,其中,包装由接收进程序号、发送进程序号、消息标号和通信域四部分组成,数据包含用户将要传递的内容;
● 进程组:一类进程的集合,在它的基础上,可以定义新的通信器;
● 基本数据类型:对应于FORTRAN和C语言的内部数据类型(INTEGER,REAL,DOUBLE PRECISION,COMPLEX,LOGICAL,CHARACTER),MPI系统提供已定义好的对应数据类型(MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECISION,
MPI_COMPLEX,MPI_LOGICAL,MPI_CHARACTER);
● 派生数据类型:基于基本数据类型,用户自己定义的数据类型;
● MPI对象: MPI系统内部定义的数据结构,包括数据类型、进程组、通信器等,它们对用户不透明。
● MPI句柄(handle):联接MPI对象和用户的桥梁,用户可以通过它访问和参与相应MPI对象的具体操作;例如,MPI系统内部提供的通信器MPI_COMM_WORLD;在FORTRAN语言中,MPI句柄均被说明为"整型变量INTEGER";
● 进程拓扑结构:进程组内部进程之间的一种相互连接结构,如3′3 网格,
3×3 网格拓扑结构
● 静态进程个数:进程数由命令"mpirun -np xxx"初始确定为xxx个,程序执行过程中不能动态改变进程的个数;
● 消息缓存区:应用程序产生的消息包含的数据所处的内存空间;
● 标准输入:所有进程的标准输入read(*,*)均省缺为当前终端屏幕,且只能由0号进程执行该操作,其他进程需要这些输入参数,只能由0号进程执行数据广播操作;
● 标准输出:所有进程可以独立执行标准输出write(*,*),但其省缺为当前终端屏幕;
3.MPI函数格式:
● FORTAN语言中,最后一个参数为该函数调用是否成功的标志:0表示成功,其它表示各种可能的错误;
● C语言中,该标志又函数参数返回;
C : ierr=MPI_Comm_rank(myrank)
F : MPI_Comm_rank(myrank,ierr)
4.常用的MPI网络资源:
http://www.mpi-forum.org
MPI论坛主页
http://www.netlib.org/mpi/index.html
netlib中与MPI有关的软件
http://www.mcs.anl.gov/mpi/mpich
mpich实现
http://www.mpi.nd.edu/lam
lam-mpi实现
http://www-unix.mcs.anl.gov/mpi/tutorial/
MPI辅导材料
5.参考书目
☆ 都志辉等. 高性能计算并行编程技术--MPI并行程序设计。清华大学出版社,2001。
☆ William Gropp, Ewing Lusk, Anthony Skjellum. Using MPI : portable
parallel programming with the message-passing interface. Cambridge,
Mass. : MIT Press, 1999.
☆ William Gropp, Ewing Lusk, Anthony Skjellum. Using MPI-2 : advanced
features of the message-passing interface. Cambridge, Mass.
: MIT Press, 1999.
☆ MPI: A Message-Passing Interface standard. MPI Forum, 1995.
|