《工学MPI概述》PPT课件.ppt

上传人:za****8 文档编号:20030766 上传时间:2021-01-27 格式:PPT 页数:39 大小:957.52KB
收藏 版权申诉 举报 下载
《工学MPI概述》PPT课件.ppt_第1页
第1页 / 共39页
《工学MPI概述》PPT课件.ppt_第2页
第2页 / 共39页
《工学MPI概述》PPT课件.ppt_第3页
第3页 / 共39页
资源描述:

《《工学MPI概述》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《工学MPI概述》PPT课件.ppt(39页珍藏版)》请在装配图网上搜索。

1、MPI Message Passing Interface 1 主讲人: xxxx MPI简介 1 MPI组成 2 点对点通信 3 群集通信 4 2 MPI程序设计 5 1 MPI 简 介 1.1 什么是 MPI? MPI(Message Passing Interface )是一个消 息传递接口标准。 MPI是一个库,而不是 一门语言。 MPI提供一个可移植、高效、灵活的消 息传递接口库。 是一种标准或规范的代表,而不特指某 一个对它的具体 实现 。 一种消息传递编程模型,并成为这种编 程模型的代表和事实上的标准 3 1.2 MPI的发展过程 MPI 由 MPI 委员会在 1992年到 19

2、94年举行 的一系列会议上逐渐产生的一个消息传递 标准。 1995年推出了 MPI 1版( 128个调用 接口) 1997年在对原来的 MPI 作了重大扩 充的基础上,推出了 MPI 2 版 ( 287个调用接口) MPI 2的主要扩充内容:并行 I/O, 远程存储访问、动态进程管理 details 1 MPI 简 介 4 1.3 MPI通信方式 点对点通信 MPI最基本的通信模式。一个进程发送消 息,另一个进程接收消息。 1.阻塞型( blocking):需要等待指定操 作的实际完成,或至少所涉及的数据已被 MPI系统安全地备份后才返回。 2.非阻塞型( non blocking ):调用总

3、是 立即返回,而实际操作则由 MPI系统在后 台进行。 群集通信 在一个通信体的所有进程间同时进行地通 信 1 MPI 简 介 5 1.4 MPI的特点 能用于异构网络环境中; 利用通信上下文提供通信的安全性; 实现了两个任务间的多种通信方式; 实现了进程组内所有任务之间的通信、 数据交换和处理; 提供了可靠的数据传输机制,发送的消 息总能被对方正确接收,用户不必检查传 输错误、超时错误或其他出错条件。 1 MPI 简 介 6 1.5 MPI的实现 MPICH: http:/www- unix.mcs.anl.gov/mpi/mpich 是 MPI最流行的非专利实现,由 Argonne国家实验

4、 室和密西西比州立大学联合开发,具有更好的可 移植性 LAM (Local Area Multicomputer): http:/www.lam-mpi.org Open-MPI: http:/www.open-mpi.org/ CHIMP: ftp:/ftp.epcc.ed.ac.uk/pub/chimp/release/ 1 MPI 简 介 2 MPI 的组成 MPI包含 若干 个调用 其中有六个基本调用: MPI_Init() MPI_Comm_rank() MPI_Comm_size() MPI_Send() MPI_Recv() MPI_Finalize() 一般有这六个调用即可完成

5、并行程序 8 2.1 6个基本函数组成的 MPI子集 #include mpi.h int main( int argc, char* argv ) int rank, size, tag=1; int senddata,recvdata; MPI_Status status; MPI_Init( MPI_Comm_rank(MPI_COMM_WORLD, MPI_Comm_size(MPI_COMM_WORLD, 2 MPI 组 成 头文件 MPI程序初始化 获得进程编号 获得进程总数 if (rank=0) senddata=9999; MPI_Send( /*发送数据到 进程 1*/ i

6、f (rank=1) MPI_Recv( /*从进程 0接收数据 */ MPI_Finalize(); return (0); 2 MPI 组 成 发送消息 接收消息 MPI程序结束 MPI程序的初始化 MPI_Init( 通过 MPI_Init函数进入 MPI环境并完成所有的 初始化工作 它包含了所有的进程初始化时默认生成一个 MPI_COMM_WORLD,它是所有进程的集合。 MPI_Init是 MPI程序的第一个调用,它完成 MPI程序的所有初始化工作。所有的 MPI程序 的第一条可执行语句都是这条语句 启动 MPI环境 ,标志并行代码的开始。 2 MPI 组 成 11 MPI程序的结束

7、 MPI_Finalize(void); 通过 MPI_Finalize函数从 MPI环境中退出。 MPI_Finalize是 MPI程序的 最后 一个调用 , 它 结束 MPI程序的运行, 它是 MPI程序的最后一条可执行语句,否 则程序的运行结果不是可预测的。 标志并行代码的 结束,结束除主进程外其 他进程。 要求 之后串行代码仍可以在主进程 (rank=0)上运行(如果必须) 2 MPI 组 成 12 获取进程的编号 MPI_Comm_rank函数获得当前进程在 指定通信域中的编号,将自身与其他程 序区分。 int MPI_Comm_rank(MPI_Comm comm, int *ra

8、nk) 获取指定通信域的进程数: MPI_Comm_size函数获取指定通信域 的进程个数,确定自身完成任务比例。 int MPI_Comm_size(MPI_Comm comm, int *size) 2 MPI 组 成 消息发送 : MPI_Send函数用于发送一个消息到目 标进程。 int MPI_Send(void *buf, int count, MPI_Datatype dataytpe, int dest, int tag, MPI_Comm comm) 消息接收 : MPI_Recv函数用于从指定进程接收一 个消息 int MPI_Recv(void *buf, int cou

9、nt, MPI_Datatype datatyepe,int source, int tag, MPI_Comm comm, MPI_Status *status) 2 MPI 组 成 15 MPI_Send ( void * buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm ) 被发送消息的地址 被发送数据项的个数 消息数据的类型 目标进程的序号 rank值 消息标签 通信体 16 MPI_Recv ( void * buf, int count, MPI_Datatype datatype, in

10、t source, int tag, MPI_Comm comm, MPI_Status *status ) 被接收消息的地址 被接收数据项的个数 消息数据的类型 源进程的序号 消息标志 通信体 返回的通信状态 2.2 MPI消息 一个消息好比一封信 消息的内容即信的内容,在 MPI 中称为消息缓冲 (Message Buffer) 消息的接收 /发送者即信的地址, 在 MPI中称为消息信封 (Message Envelop) 2 MPI 组 成 MPI中,消息缓冲由三元组 标识 消息信封由三元组 标识 三元组的方式使得 MPI可以表达更为丰 富的信息,功能更强大 MPI_Send (buf,

11、 count , datatype, dest, tag, comm ) 消息缓冲 消息信封 2 MPI 组 成 2.2.1 MPI消息 (数据类型 ) MPI的数据类型分为两种:预定义类型 和派生数据类型 (Derived Data Type) 预定义数据类型 :MPI支持异构计算 (Heterogeneous Computing),它指在不 同计算机系统上运行程序,每台计算 可能有不同生产厂商,不同操作系统。 派生数据类型: MPI引入派生数据类型 来定义由数据类型不同且地址空间不 连续的数据项组成的消息。 2 MPI 组 成 表 2.1 MPI 中预定义的数据类型 MP I ( C 语言

12、绑定 ) C MP I ( F ort ran 语言绑定 ) F ort ran MP I _B Y T E MP I _ B Y T E M PI _C H A R s i g ne d cha r M PI _C H A R A C T E R C H A R A C T E R M PI _C O M PL E X C O M PL E X M PI _D O U B L E do ubl e M PI _D O U B L E _PR E C I SI O N D O U B L E _PR E C I SI O N M PI _F L O A T f l o at M PI _R E

13、 A L R E A L M PI _I N T i nt M PI _I N T E G E R I N T E G E R M PI _L O G I C A L L O G I C A L M PI _L O N G l o ng M PI _L O N G _D O U B L E l o ng do ubl e MP I _P A C K E D MP I _P A C K E D M PI _SH O R T s ho r t M PI _U N SI G N E D _C H A R uns i g ne d cha r M PI _U N SI G N E D uns i g

14、ne d i nt M PI _U N SI G N E D _L O N G uns i g ne d l o ng M PI _U N SI G N E D _SH O R T uns i g ne d s ho r t 2 MPI 组 成 MPI提供了两个附加类型 :MPI_BYTE 和 MPI_PACKED 。 MPI_BYTE表示一个字节,所有的计 算系统中一个字节都代表 8个二进制 位。 MPI_PACKED预定义数据类型被用来 实现传输地址空间不连续的数据项 。 2 MPI 组 成 2.2.1 MPI消息 (数据类型 ) double A100; MPI_Pack_size (5

15、0,MPI_DOUBLE,comm, TempBuffer = malloc(BufferSize); j = 2*sizeof(MPI_DOUBLE); Position = 0; for (i=0;i50;i+) MPI_Pack(A+i*j,1,MPI_DOUBLE,TempBuffer,BufferSiz e, MPI_Send(TempBuffer,Position,MPI_PACKED,destination,t ag,comm); MPI_Pack_size函数来决定用于存放 50个 MPI_DOUBLE数据项的临时缓冲区的大小 调用 malloc函数为这个临时缓冲区分配内存 f

16、or循环中将数组 A的 50个偶序数元素打包成一 个消息并存放在临时缓冲区 2 MPI 组 成 消息打包,然后发送 MPI_Pack(buf, count, dtype, packbuf, packsize, packpos, communicator) 以上为待打包消息描述 以上为打包缓冲区描述 消息接收,然后拆包 MPI_Unpack(packbuf, packsize, packpos, buf, count, dtype, communicatior 以上为拆包缓冲区描述 以上为拆包消息描述 2.2.1 MPI消息 (数据类型 ) 派生数据类型可以用类型图来描述,这是一种通用的类型描述

17、方 法,它是一系列二元组 的集合,可以表示成如下 格式: , , 在派生数据类型中,基类型可以是任何 MPI预定义数据类型,也可 以是其它的派生数据类型,即支持数据类型的嵌套定义。 如图,阴影部分是基类型所占用的空间,其它空间可以是特意留 下的,也可以是为了方便数据对齐。 基类型 0 基类型 1 基类型 i 基类型 n - 1 偏移 0 偏移 1 偏移 i 偏移 n - 1 类型图的跨度 类型图的下界 类型图的上界 偏移 2 MPI 组 成 2.2.1 MPI消息 (数据类型 ) 24 MPI提供了全面而强大的 构造函数 (Constructor Function)来定义派 生数据类型。 函数

18、名 含义 MPI_Type_contiguous 定义由相同数据类型的元素组成的类型 MPI_Type_vector 定义由成块的元素组成的类型,块之间具有相同间隔 MPI_Type_indexed 定义由成块的元素组成的类型,块长度和偏移由参数 指定 MPI_Type_struct 定义由不同数据类型的元素组成的类型 MPI_Type_commit 提交一个派生数据类型 MPI_Type_free 释放一个派生数据类型 2.2.1 MPI消息 (数据类型 ) 25 double A100; MPI_Datatype EvenElements; MPI_Type_vector(50, 1, 2

19、, MPI_DOUBLE, MPI_Type_commit( MPI_Send(A, 1, EvenElements, destination, ); 首先声明一个类型为 MPI_Data_type的变量 EvenElements 调用构造函数 MPI_Type_vector(count, blocklength, stride, oldtype, p r oc e ss r e c e i v e d _r e q u e st; P r oc e ss P : se n d ( r e q u e st1, 32, Q, t ag1) P r oc e ss R : se n d ( r

20、e q u e st2, 32, Q, t ag2) P r oc e ss Q : w h i l e ( t r u e ) r e c v ( r e c e i v e d _r e q u e st, 32, A n y _P r oc e ss , A n y _T ag, S t at u s); i f ( S t at u s.T ag= = t ag1) p r oc e ss r e c e i v e d _r e q u e st in on e w ay ; i f ( S t at u s.T ag= = t ag2) p r oc e ss r e c e i

21、v e d _r e q u e st in an ot h e r w ay ; 2.2.3 MPI消息 (消息标签 ) 33 通信域 (Communicator)包括 进程组 (Process Group)和 通信上下文 (Communication Context)等内容, 用于描述通信进程间的通信关系。 通信域分为组内通信域和组间通 信域,分别用来实现 MPI的 组内 通信 (Intra-communication)和 组间 通信 (Inter-communication)。 2 MPI 组 成 2.2.3 MPI消息 (通信域 ) 进程组是进程的有限、有序集。 有限意味着,在一个进程

22、组中,进程 的个数 n是有限的,这里的 n称为 进程 组大小 (Group Size)。 又序意味着,进程的编号是按 0, 1, , n-1排列的 一个进程用它在一个通信域 (组 )中的编 号进行标识。组的大小和进程编号可以 通过调用以下的 MPI函数获得 : MPI_Comm_size(communicator, switch (Status.MPI_Tag) case tag_0: perform service type0; case tag_1: perform service type1; case tag_2: perform service type2 2 MPI 组 成 #include mpi.h int main( int argc, char* argv ) int rank, size, tag=1; int senddata,recvdata; MPI_Status status; MPI_Init( MPI_Comm_rank(MPI_COMM_WORLD, MPI_Comm_size(MPI_COMM_WORLD, if (rank=0) senddata=9999; MPI_Send( if (rank=1) MPI_Recv( MPI_Finalize(); return (0);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!