并行算法实践.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《并行算法实践.ppt》由会员分享,可在线阅读,更多相关《并行算法实践.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、并行算法实践,上篇 并行程序设计导论,国家高性能计算中心(合肥),2,2019/10/22,并行算法实践上篇 并行程序设计导论,单元I 并行程序设计基础单元II 并行程序编程指南单元III 并行程序开发方法,国家高性能计算中心(合肥),3,2019/10/22,单元II 并行程序编程指南,第四章 MPI编程指南第五章 PVM编程指南第六章 HPF编程指南第七章 OpenMP编程指南,国家高性能计算中心(合肥),4,2019/10/22,第四章 MPI编程指南,4.1 引言4.2 6个基本函数组成的MPI子集4.3 MPI消息4.4 点对点通信4.5 群集通信4.6 MPI扩展4.7 小结,国家
2、高性能计算中心(合肥),5,2019/10/22,4.1 引言,MPI(Message Passing Interface )是一个消息传递接口标准MPI提供一个可移植、高效、灵活的消息传递接口库MPI以语言独立的形式存在,可运行在不同的操作系统和硬件平台上MPI提供与C/C+和Fortran语言的绑定,国家高性能计算中心(合肥),6,2019/10/22,4.1 引言,MPI的版本MPICH:http:/www-unix.mcs.anl.gov/mpi/mpichLAM (Local Area Multicomputer): http:/www.lam-mpi.orgOpen-MPI: ht
3、tp:/www.open-mpi.org/CHIMP: ftp:/ftp.epcc.ed.ac.uk/pub/chimp/release/,国家高性能计算中心(合肥),7,2019/10/22,4.2 6个基本函数组成的MPI子集,#include mpi.h /*MPI头函数,提供了MPI函数和数据类型定义*/int main( int argc, char* argv )int rank, size, tag=1;int senddata,recvdata;MPI_Status status; MPI_Init( /*总进程数目*/,国家高性能计算中心(合肥),8,2019/10/22,4
4、.2 6个基本函数组成的MPI子集,if (rank=0)senddata=9999; MPI_Send( ,国家高性能计算中心(合肥),9,2019/10/22,4.2 6个基本函数组成的MPI子集,MPI初始化:通过MPI_Init函数进入MPI环境并完成所有的初始化工作。int MPI_Init( int *argc, char * * * argv )MPI结束:通过MPI_Finalize函数从MPI环境中退出。int MPI_Finalize(void),国家高性能计算中心(合肥),10,2019/10/22,4.2 6个基本函数组成的MPI子集,获取进程的编号:调用MPI_Com
5、m_rank函数获得当前进程在指定通信域中的编号,将自身与其他程序区分。int MPI_Comm_rank(MPI_Comm comm, int *rank)获取指定通信域的进程数:调用MPI_Comm_size函数获取指定通信域的进程个数,确定自身完成任务比例。int MPI_Comm_size(MPI_Comm comm, int *size),国家高性能计算中心(合肥),11,2019/10/22,4.2 6个基本函数组成的MPI子集,消息发送:MPI_Send函数用于发送一个消息到目标进程。int MPI_Send(void *buf, int count, MPI_Datatype
6、dataytpe, int dest, int tag, MPI_Comm comm) 消息接受:MPI_Recv函数用于从指定进程接收一个消息int MPI_Recv(void *buf, int count, MPI_Datatype datatyepe,int source, int tag, MPI_Comm comm, MPI_Status *status),国家高性能计算中心(合肥),12,2019/10/22,4.3 MPI消息,一个消息好比一封信消息的内容即信的内容,在MPI中称为消息缓冲(Message Buffer)消息的接收/发送者即信的地址,在MPI中称为消息信封(Me
7、ssage Envelop),国家高性能计算中心(合肥),13,2019/10/22,4.3 MPI消息,MPI中,消息缓冲由三元组标识消息信封由三元组标识 三元组的方式使得MPI可以表达更为丰富的信息,功能更强大,国家高性能计算中心(合肥),14,2019/10/22,4.3 MPI消息(数据类型),MPI的消息类型分为两种:预定义类型和派生数据类型(Derived Data Type)预定义数据类型:MPI支持异构计算(Heterogeneous Computing),它指在不同计算机系统上运行程序,每台计算可能有不同生产厂商,不同操作系统。MPI通过提供预定义数据类型来解决异构计算中的互
8、操作性问题,建立它与具体语言的对应关系。派生数据类型:MPI引入派生数据类型来定义由数据类型不同且地址空间不连续的数据项组成的消息。,国家高性能计算中心(合肥),15,2019/10/22,4.3 MPI消息(数据类型),国家高性能计算中心(合肥),16,2019/10/22,4.3 MPI消息(数据类型),MPI提供了两个附加类型:MPI_BYTE和MPI_PACKED 。MPI_BYTE表示一个字节,所有的计算系统中一个字节都代表8个二进制位。MPI_PACKED预定义数据类型被用来实现传输地址空间不连续的数据项 。,国家高性能计算中心(合肥),17,2019/10/22,4.3 MPI消
9、息(数据类型),double A100;MPI_Pack_size (50,MPI_DOUBLE,comm, MPI_Pack_size函数来决定用于存放50个MPI_DOUBLE数据项的临时缓冲区的大小 调用malloc函数为这个临时缓冲区分配内存 for循环中将数组A的50个偶序数元素打包成一个消息并存放在临时缓冲区,国家高性能计算中心(合肥),18,2019/10/22,4.3 MPI消息(数据类型),消息打包,然后发送 MPI_Pack(buf, count, dtype, /以上为待打包消息描述 packbuf, packsize, packpos, /以上为打包缓冲区描述 comm
10、unicator)消息接收,然后拆包MPI_Unpack(packbuf, packsize, packpos, /以上为拆包缓冲区描述 buf, count, dtype, / 以上为拆包消息描述 communicatior),国家高性能计算中心(合肥),19,2019/10/22,4.3 MPI消息(数据类型),派生数据类型可以用类型图来描述,这是一种通用的类型描述方法,它是一系列二元组的集合,可以表示成如下格式:,在派生数据类型中,基类型可以是任何MPI预定义数据类型,也可以是其它的派生数据类型,即支持数据类型的嵌套定义。 如图,阴影部分是基类型所占用的空间,其它空间可以是特意留下的,也
11、可以是为了方便数据对齐。,国家高性能计算中心(合肥),20,2019/10/22,4.3 MPI消息(数据类型),MPI提供了全面而强大的构造函数(Constructor Function)来定义派生数据类型。,国家高性能计算中心(合肥),21,2019/10/22,4.3 MPI消息(数据类型),double A100;MPI_Datatype EvenElements;MPI_Type_vector(50, 1, 2, MPI_DOUBLE, 首先声明一个类型为MPI_Data_type的变量EvenElements 调用构造函数MPI_Type_vector(count, blockle
12、ngth, stride, oldtype, &newtype)来定义派生数据类型 新的派生数据类型必须先调用函数MPI_Type_commit获得MPI系统的确认后才能调用MPI_Send进行消息发送,国家高性能计算中心(合肥),22,2019/10/22,4.3 MPI消息(数据类型),调用构造函数MPI_Type_vector(count, blocklength, stride, oldtype, &newtype)来定义派生数据类型。该newtype由count个数据块组成。而每个数据块由blocklength个oldtype类型的连续数据项组成。参数stride定义了两个连续数据块
13、的起始位置之间的oldtype类型元素的个数。因此,两个块之间的间隔可以由(stride-blocklength)来表示。MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements)函数调用产生了派生数据类型EvenElements,它由50个块组成,每个块包含一个双精度数,后跟一个(21)MPI_DOUBLE(8字节)的间隔,接在后面的是下一块。上面的发送语句获取数组A的所有序号为偶数的元素并加以传递。,国家高性能计算中心(合肥),23,2019/10/22,4.3 MPI消息(数据类型),MPI_Type_vector(count, blocklengt
14、h, stride, oldtype, &newtype),oldtype,oldtype,blocklength,oldtype,blocklength,stride,oldtype,count,国家高性能计算中心(合肥),24,2019/10/22,4.3 MPI消息(数据类型),左图1010整数矩阵的所有偶序号的行:MPI_Type_vector( 5, / count 10, / blocklength 20, / stride MPI_INT, /oldtype &newtype),国家高性能计算中心(合肥),25,2019/10/22,4.3 MPI消息(数据类型),MPI_Typ
15、e_struct( count, /成员数 array_of_blocklengths, /成员块长度数组 array_of_displacements,/成员偏移数组 array_of_types, /成员类型数组 newtype / 新类型),国家高性能计算中心(合肥),26,2019/10/22,MPI_Type_struct,type1,type1,type2,type3,type3,type3,struct,count = 3,array_of_blocklengths= 2, 1, 3,array_of_displacement= ?, ?, ?,array_of_type= ty
16、pe1,type2,type3,国家高性能计算中心(合肥),27,2019/10/22,type1,type1,type2,type3,type3,type3,struct,array_of_displacement= ?, ?, ?,MPI_Address(成员,偏移),国家高性能计算中心(合肥),28,2019/10/22,4.3 MPI消息(消息标签),为什么需要消息标签?当发送者连续发送两个相同类型消息给同一个接收者,如果没有消息标签,接收者将无法区分这两个消息 这段代码打算传送A的前32个字节进入X,传送B的前16个字节进入Y。但是,尽管消息B后发送,但可能先到达进程Q,就会被第一个
17、接收函数接收在X中。使用标签可以避免这个错误,国家高性能计算中心(合肥),29,2019/10/22,4.3 MPI消息(消息标签),添加标签使得服务进程可以对两个不同的用户进程分别处理,提高灵活性,国家高性能计算中心(合肥),30,2019/10/22,4.3 MPI消息(通信域),通信域(Communicator)包括进程组(Process Group)和通信上下文(Communication Context)等内容,用于描述通信进程间的通信关系。通信域分为组内通信域和组间通信域,分别用来实现MPI的组内通信(Intra-communication)和组间通信(Inter-communic
18、ation)。,国家高性能计算中心(合肥),31,2019/10/22,4.3 MPI消息(通信域),进程组是进程的有限、有序集。 有限意味着,在一个进程组中,进程的个数n是有限的,这里的n称为进程组大小(Group Size)。有序意味着,进程的编号是按0,1,n-1排列的一个进程用它在一个通信域(组)中的编号进行标识。组的大小和进程编号可以通过调用以下的MPI函数获得:MPI_Comm_size(communicator, &group_size)MPI_Comm_rank(communicator, &my_rank),国家高性能计算中心(合肥),32,2019/10/22,4.3 MP
19、I消息(通信域),通信上下文:安全的区别不同的通信以免相互干扰通信上下文不是显式的对象,只是作为通信域的一部分出现进程组和通信上下文结合形成了通信域MPI_COMM_WORLD是所有进程的集合,国家高性能计算中心(合肥),33,2019/10/22,4.3 MPI消息(通信域),MPI提供丰富的函数用于管理通信域,国家高性能计算中心(合肥),34,2019/10/22,4.3 MPI消息(通信域),一个在MPI中创建新通信域的例子MPI_Comm MyWorld, SplitWorld;int my_rank,group_size, Color, Key;MPI_Init(,国家高性能计算中心
20、(合肥),35,2019/10/22,4.3 MPI消息(通信域),MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld)创建了一个新的通信域MyWorld,它包含了与原通信域MPI_COMM_WORLD相同的进程组,但具有不同的通信上下文。MPI_Comm_split(MyWorld,Color,Key,&SplitWorld)函数调用则在通信域MyWorld的基础上产生了几个分割的子通信域。原通信域MyWorld中的进程按照不同的Color值处在不同的分割通信域中,每个进程在不同分割通信域中的进程编号则由Key值来标识。,国家高性能计算中心(合肥),36,2019/10
21、/22,4.3 MPI消息(通信域),组间通信域是一种特殊的通信域,该通信域包括了两个进程组,分属于两个进程组的进程之间通过组间通信域实现通信。一般把调用进程所在的进程组称为本地进程组,而把另外一个称为远程进程组。,国家高性能计算中心(合肥),37,2019/10/22,4.3 MPI消息(消息状态),消息状态(MPI_Status类型)存放接收消息的状态信息,包括:消息的源进程标识MPI_SOURCE消息标签MPI_TAG 错误状态MPI_ERROR其他包括数据项个数等,但多为系统保留的。是消息接收函数MPI_Recv的最后一个参数。当一个接收者从不同进程接收不同大小和不同标签的消息时,消息
22、的状态信息非常有用。,国家高性能计算中心(合肥),38,2019/10/22,4.3 MPI消息(消息状态),假设多个客户进程发送消息给服务进程请求服务,通过消息标签来标识客户进程,从而服务进程采取不同的服务while (true)MPI_Recv(received_request,100,MPI_BYTE,MPI_Any_source,MPI_Any_tag,comm,国家高性能计算中心(合肥),39,2019/10/22,4.4 点对点通信,MPI的点对点通信(Point-to-Point Communication )同时提供了阻塞和非阻塞两种通信机制 。同时也支持多种通信模式。不同通信
23、模式和不同通信机制的结合,便产生了非常丰富的点对点通信函数。,国家高性能计算中心(合肥),40,2019/10/22,4.4 点对点通信(通信模式),通信模式(Communication Mode)指的是缓冲管理,以及发送方和接收方之间的同步方式。 共有下面四种通信模式同步(synchronous)通信模式缓冲(buffered)通信模式标准(standard)通信模式就绪(ready)通信模式,国家高性能计算中心(合肥),41,2019/10/22,4.4 点对点通信(通信模式),同步通信模式:只有相应的接收过程已经启动,发送过程才正确返回。因此,同步发送返回后,表示发送缓冲区中的数据已经全
![并行算法实践.ppt_第1页](https://file.taowenge.com/fileroot/2019-10/21/6bffca8d-fc48-4291-9a34-6a65196b168c/6bffca8d-fc48-4291-9a34-6a65196b168c1.gif)
![并行算法实践.ppt_第2页](https://file.taowenge.com/fileroot/2019-10/21/6bffca8d-fc48-4291-9a34-6a65196b168c/6bffca8d-fc48-4291-9a34-6a65196b168c2.gif)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 算法 实践
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内