消息传递编程接口MPI.ppt
《消息传递编程接口MPI.ppt》由会员分享,可在线阅读,更多相关《消息传递编程接口MPI.ppt(41页珍藏版)》请在三一文库上搜索。
1、第四讲消息传递编程接口 MPI一、一、MPI 编程基础编程基础1主要内容主要内容q MPI 安装、程序编译与运行安装、程序编译与运行 u MPI 进程进程/进程组进程组u MPI 通信器通信器u MPI 消息消息u MPI 程序基本结构程序基本结构q MPI 编程基础编程基础q MPI 程序编译与运行程序编译与运行q MPI 数据类型数据类型q MPI 几个常用接口几个常用接口 2MPI 介绍介绍q Message Passing Interfacel 消息传递编程标准,目前最为通用的并行编程方式消息传递编程标准,目前最为通用的并行编程方式l 提供一个高效、可扩展、统一的并行编程环境提供一个高
2、效、可扩展、统一的并行编程环境l MPI 是一个库,不是一门语言,是一个库,不是一门语言,MPI 提供库函数提供库函数/过程供过程供 C/FORTRAN 调用调用l MPI 是一种标准或规范的代表,并不是一个具体实现是一种标准或规范的代表,并不是一个具体实现l 所有的并行计算机制造商都提供对所有的并行计算机制造商都提供对 MPI 的支持的支持l MPI 是一种消息传递编程模型是一种消息传递编程模型,最终目的是服务于进程间最终目的是服务于进程间通信这一目标通信这一目标3MPI 介绍介绍l MPI 1.0:MPICH 1.2.7p1l MPI 2.0:MPICH2 1.1.1p1q MPI 的实现
3、的实现 免费版本免费版本l 1994 年公布年公布 MPI 1.0 标准,标准,1998 年公布年公布 2.0 标准标准 q MPI 的目标的目标l 较高的通信性能;较高的通信性能;l 较好的程序可移植性;较好的程序可移植性;l 强大的功能强大的功能q MPI 商业版本商业版本l 一些厂商也提供商业版的一些厂商也提供商业版的 MPI 系统,许多是在系统,许多是在 MPICH 的基础上优化产生的的基础上优化产生的4MPI 下载与安装下载与安装q MPICH 下载下载http:/www-unix.mcs.anl.gov/mpi/q MPICH 的安装的安装l 参考参考 MPICH Install
4、Guideq MPICH 的使用的使用l 参考参考 MPICH User Guide5进程与通信器进程与通信器q MPI 进程进程l MPI 程序中一个独立参与通信的个体程序中一个独立参与通信的个体q MPI 进程组进程组l MPI 程序中由程序中由部分部分或或全部全部进程构成的进程构成的有序集合有序集合l 每个进程都被赋予一个每个进程都被赋予一个所在进程组所在进程组中中唯一唯一的的序号序号(rank),用于在该组中标识该进程,称为用于在该组中标识该进程,称为进程号进程号,取值从,取值从 0 开始开始进程的具体个数由用户在递交并行任务时指定进程的具体个数由用户在递交并行任务时指定q MPI 通
5、信器通信器/通信子(通信子(Communicator)l MPI 程序中进程间的通信程序中进程间的通信必须必须通过通信器进行通过通信器进行l 通信器分为通信器分为域内通信器域内通信器(同一进程组内的通信)和(同一进程组内的通信)和域间通域间通信器信器(不同进程组的进程间的通信)(不同进程组的进程间的通信)6进程与通信器进程与通信器u MPI 程序中,一个程序中,一个 MPI 进程进程 由一个进程组和在该组中的进程号唯一确定;或由一个进程组和在该组中的进程号唯一确定;或 由一个通信器和在该通信器中的进程号唯一确定由一个通信器和在该通信器中的进程号唯一确定u 进程号是相对进程组或通信器而言的,同一
6、进程在不进程号是相对进程组或通信器而言的,同一进程在不 同的进程组或通信器中可以有不同的进程号同的进程组或通信器中可以有不同的进程号l MPI 程序启动时自动建立两个通信器:程序启动时自动建立两个通信器:MPI_COMM_WORLD :包含程序中所有:包含程序中所有 MPI 进程进程 MPI_COMM_SELF:单个进程独自构成,仅包含自己:单个进程独自构成,仅包含自己u 进程号是在进程组或通信器被创建时赋予的进程号是在进程组或通信器被创建时赋予的u 空进程:空进程:MPI_PROC_NULLu 与空进程通信时不做任何操作与空进程通信时不做任何操作7MPI 消息消息q 消息(消息(messag
7、e)l 一个消息指一个消息指进程间进行的一次数据交换进程间进行的一次数据交换l 一个消息由一个消息由 通信器、源地址、目的地址、消息标签、通信器、源地址、目的地址、消息标签、和和数据数据构成构成发送方发送方接受方接受方8第一个第一个 MPI C 程序程序#include mpi.h#include int main(int argc,char*argv)int myid,np,namelen;char proc_nameMPI_MAX_PROCESSOR_NAME;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Com
8、m_size(MPI_COMM_WORLD,&np);MPI_Get_processor_name(proc_name,&namelen);fprintf(stderr,Hello,I am proc.%d of%d on%sn,myid,np,proc_name);MPI_Finalize();MPI 的初始化和结束的初始化和结束mpi.h 是是 MPI 相对于相对于C语言的头文件语言的头文件调用调用MPI 函数时必须包含函数时必须包含 MPI 头文件头文件获取运行本进程所在的结点的主机名获取运行本进程所在的结点的主机名获取本进程的进程号获取本进程的进程号进程号取值范围为进程号取值范围为 0
9、np-1获取所有参加运算的进程的个数获取所有参加运算的进程的个数MPI 预定义的宏:所允许的机器名字的最大长度预定义的宏:所允许的机器名字的最大长度9MPI 程序执行过程程序执行过程启动启动 4 个进程运行可执行文件个进程运行可执行文件 hello进程进程 0MPI_InitMPI_Comm_rankmyid=0MPI_Get_processor_nameproc_name=c0101namelen=5Writehello,I am proc.0 of 4 on c0101MPI_Finalize进程进程 3MPI_InitMPI_Comm_rankmyid=3MPI_Get_process
10、or_nameproc_name=c0102namelen=5Writehello,I am proc.3 of 4 on c0102MPI_Finalize 程序运行结束程序运行结束 进程进程 1进程进程 210MPI 程序分析程序分析u 在单个结点在单个结点(c0101)上,开上,开 4 个进程的运行结果个进程的运行结果Hello,I am Proc.1 of 4 on c0101Hello,I am Proc.0 of 4 on c0101Hello,I am Proc.2 of 4 on c0101Hello,I am Proc.3 of 4 on c0101u 在四个结点上,开在四个
11、结点上,开 4 个进程的运行结果个进程的运行结果Hello,I am Proc.1 of 4 on c0101Hello,I am Proc.3 of 4 on c0102Hello,I am Proc.2 of 4 on c0104Hello,I am Proc.0 of 4 on c010311MPI 程序执行过程程序执行过程12MPI 编程惯例编程惯例l MPI 的所有常量、变量与函数均以的所有常量、变量与函数均以 MPI_ 开头开头l MPI 的的 C 语言接口为语言接口为函数函数l 在在 C 程序中,所有常数的定义除下划线外一律由大写字母程序中,所有常数的定义除下划线外一律由大写字母
12、 组成,在函数和数据类型定义中组成,在函数和数据类型定义中,接接 MPI_ 之后的第一个字之后的第一个字 母大写,其余全部为小写字母,即母大写,其余全部为小写字母,即 MPI_Xxxx_xxx 形式形式l MPI 程序的开始和结束必须是程序的开始和结束必须是 MPI_Init 和和 MPI_Finalize,分别完成,分别完成 MPI 的初始化和结束工作的初始化和结束工作l 除除 MPI_Wtime 和和 MPI_Wtick 外,所有外,所有 C 函数调用之后函数调用之后 都将返回一个错误信息码都将返回一个错误信息码l 由于由于 C 语言的函数调用机制是值传递,所以语言的函数调用机制是值传递,
13、所以 MPI 的所有的所有 C 函数中的函数中的输出参数输出参数用的都是用的都是指针指针13MPI 编程惯例编程惯例l MPI 是按进程组是按进程组(Process Group)方式工作:方式工作:所有所有 MPI 程序在开始时均被认为是在通信器程序在开始时均被认为是在通信器 MPI_COMM_WORLD 所拥有的进程组中工作,所拥有的进程组中工作,之后用户可以根据自己的需要,建立其它的进程组之后用户可以根据自己的需要,建立其它的进程组l 所有所有 MPI 的通信一定要在的通信一定要在通信器通信器中进行中进行14编译与运行编译与运行l C 编写的编写的 MPI 程序程序mpicc o hell
14、o hello.cq MPI 程序的编译程序的编译q MPI 程序的运行程序的运行l mpirun (old,使用,使用 rsh 启动启动 MPI 进程)进程)l mpiexec(new,使用,使用 ssh 启动启动 MPI 进程,更安全)进程,更安全)MPICH2 中的中的 mpirun 和和 mpiexec 是同一个命令是同一个命令15MPI 编程初步编程初步数据类型与基本接口数据类型与基本接口16MPI 数据类型数据类型MPI 数据类型分:数据类型分:原始数据类型原始数据类型和和自定义数据类型自定义数据类型u MPI 定义了一些基本数据类型定义了一些基本数据类型 主要主要用于消息传递用于
15、消息传递 n MPI 数据类型命名规则数据类型命名规则 以以 MPI_ 开头,后面跟开头,后面跟 C 语言原始数据类型名语言原始数据类型名全部为大写!全部为大写!17MPI 原始数据类型原始数据类型MPI datatypeC datatypeMPI_CHARsigned charMPI_SHORTsigned short intMPI_INTsigned intMPI_LONGsigned long intMPI_UNSIGNED_CHARunsigned charMPI_UNSIGNED_SHORTunsigned short intMPI_UNSIGNED_INTunsigned intM
16、PI_UNSIGNED_LONGunsigned long intMPI_FLOATfloatMPI_DOUBLEdoubleMPI_LONG_DOUBLElong doubleMPI_BYTEMPI_PACKED自定义数据类型以后再介绍自定义数据类型以后再介绍18MPI 常量常量n MPI 定义一组常量定义一组常量 l MPI 常量命名规则:全部大写常量命名规则:全部大写 MPI_MAX_PROCESSOR_NAMEMPI_PROC_NULLMPI_COMM_WORLDMPI_COMM_SELFMPI_COMM_NULLMPI_ANY_SOURCEMPI_ANY_TAGMPI_TAG_UBM
17、PI_LBMPI_UBMPI_BOTTOM 19MPI 常用接口常用接口l MPI_INIT l MPI_FINALIZE l MPI_COMM_RANKl MPI_COMM_SIZEl MPI_SENDl MPI_RECVl MPI_SENDRECV l MPI_SENDRECV_REPLACE l MPI_GET_COUNTl MPI_ABORTl MPI_WTIMEl MPI_GET_PROCESSOR_NAMEl MPI_MPI_GET_VERSION20MPI_INITMPI_INIT:MPI 初始化初始化参数参数无无Cint MPI_Init(int*argc,char*argv)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 消息 传递 编程 接口 MPI
