第四讲消息传递编程接口 MPI
一、 MPI 编程基础
主要内容
MPI 程序基本结构
MPI 编程基础
MPI 安装、程序编译与运行
MPI 数据类型
消息发送和接收
MPI 一些常用函数
MPI 介绍
Message Passing Interface
消息传递编程标准,目前最为通用的并行编程方式
提供一个高效、可扩展、统一的并行编程环境
MPI 是一个库,不是一门语言,MPI 提供库函数/过程供 C/FORTRAN 调用
MPI 是一种标准或规范的代表而不特指某一个对它的具体实现。迄今为止所有的并行计算机制造商都提供对MPI 的支持
MPI 是一种消息传递编程模型,最终目的是服务于进程间通信这一目标
MPI 介绍
MPI :MPICH
MPI :MPICH2
MPI 的实现——免费版本
1994 年公布 MPI 标准,1998 年公布 标准
MPI 的目标
较高的通信性能;
较好的程序可移植性;
强大的功能
MPI 商业版本
一些厂商也提供商业版的 MPI 系统,许多是在 MPICH 的基础上优化产生的
MPI 下载与安装
MPICH 下载
/
MPICH 的安装
参考 MPICH Install Guide
MPICH 的使用
参考 MPICH User Guide
MPI 编程基本概念
MPI 进程
MPI 程序中一个独立参与通信的个体
MPI 进程组
MPI 程序中由部分或全部进程构成的有序集合
每个进程都被赋予一个所在进程组中唯一的序号(rank),用于在该组中标识该进程,称为进程号,取值从 0 开始
MPI 进程与通信器
MPI 通信器/municator)
MPI 程序中进程间的通信必须通过通信器进行
通信器分为域内通信器(同一进程组内的通信)和域间通信器(不同进程组的进程间的通信)
MPI 程序中,一个 MPI 进程 由一个进程组和在该组中的进程号唯一确定;或 由一个通信器和在该通信器中的进程号唯一确定
进程号是相对进程组或通信器而言的,同一进程在不 同的进程组或通信器中可以有不同的进程号
MPI 程序启动时自动建立两个通信器: M_WORLD :包含程序中所有 MPI 进程 M_SELF :有单个进程独自构成,仅包含自己
MPI 消息
进程号是在进程组或通信器被创建时赋予的
空进程:MPI_PROC_NULL
与空进程通信时不做任何操作
消息(message)
一个消息指进程间进行的一次数据交换
一个消息由通信器、源地址、目的地址、消息标签、 和数据构成
第一个 MPI Fortran 程序
program main
include ''
character * (MPI_MAX_PROCESSOR_NAME) proc_name
integer myid, numprocs, namelen, rc, ierr
call MPI_INIT( ierr )
call M_RANK( M_WORLD, myid, ierr )
call M_SIZE( M_WORLD, numprocs, ierr )
call MPI_GET_PROCESSOR_NAME(proc_name, namelen, ierr)
write(*,10) myid, numprocs, proc_name
10 FORMAT('Hello, I am Proc. ',I2,' of ',I1,' on ', 20A)
call MPI_FINALIZE(ierr)
end
是MPI相对于FORTRAN的头文件
MPI 程序分析
所有包含 MPI 调用的程序必须包含 MPI 头文件
MPI_MAX_PROCESSOR_NAME 是 MPI 预定义的宏, 即 MPI 所允许的机器名字的最大长度
MPI 程序的开始和结束必须是 MPI_INIT 和 MPI_FINALIZE,分别完成 MPI 的初始化和结束工作
M_RANK 得到本进程的进程号
M_SIZE 得到所有参加运算的进程的个数
MPI_GET_PROCESSOR_NAME 得到运行本进程所在的 结点的主机名
进程号取值范围为 0, …, np-1
消息传递编程接口MPI 来自淘豆网www.taodocs.com转载请标明出处.