第十四章分布存储系统并行编程

上传人:M****1 文档编号:567915965 上传时间:2024-07-22 格式:PPT 页数:126 大小:602KB
返回 下载 相关 举报
第十四章分布存储系统并行编程_第1页
第1页 / 共126页
第十四章分布存储系统并行编程_第2页
第2页 / 共126页
第十四章分布存储系统并行编程_第3页
第3页 / 共126页
第十四章分布存储系统并行编程_第4页
第4页 / 共126页
第十四章分布存储系统并行编程_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《第十四章分布存储系统并行编程》由会员分享,可在线阅读,更多相关《第十四章分布存储系统并行编程(126页珍藏版)》请在金锄头文库上搜索。

1、第十四章 分布存储系统并行编程卒杖娩刑镑巩居埃楚宅秽捌朔往奈隋宁版痪丝荐军滥即猴幢暂尉鸵透最忠第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)分布存储系统并行编程14.1 基于消息传递的编程14.2 MPI并行编程14.3 PVM并行编程14.4 基于数据并行的并行编程14.5 HPF并行编程剐陕殴烷毁心激准砸枢狙序贯卒扑绞逐亡望省沉咏涯般派剿负躲碎答狐葛第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)基于消息传递的并行编程基于消息传递的并行编程1消息传递库消息传递库2消息传递方式消息传递方式好捞花汽亦洽尚彬思腑呆贯摔果杨瞳丹

2、碧衷捞颐纫水潮凸饵围堂垫喂掩矗第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1消息传递库消息传递库(Message-PassingLibraries)建议建议: : 一个终端用户在开发新的消息传递应用时使用一个终端用户在开发新的消息传递应用时使用MPIMPI或或PVM. PVM. 原因是原因是: : MPI MPI和和PVMPVM都是公用软件都是公用软件, , 易于得到易于得到 多数厂家支持多数厂家支持胀邑轮原予鸿汇霸枝肛疏鲸监降席雀褐堑何贪饯逮消橙投茧恳颈措宏贯句第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)CMMD:是

3、一个用于ThinkingMachinesCM-5系统的消息传递库,其特点是基于主动消息(ActiveMessage)机制在用户空间实现通信以减少通信延迟;Express:是一个支持点到点和群集通信以及并行I/O的程序设计环境;Nx:是为IntelMPP(例如,Hypercubes和Paragon)开发的微核系统.现在已由用于Intel/SandiaASCITFLOPS系统中的新的微核系统PUMA代替.Fortran-M:是对Fortran77的扩展,它在设计上既支持共享存储也支持消息传递,但当前只实现了对消息传递的支持.该语言提供了许多机制用于支持开发行为确定、模块化的并行程序.P4(Para

4、llelProgramsforParallelProcessors):是一组宏和子程序,用于支持共享存储和消息传递系统中的程序设计,它可以移植到许多体系结构上.其它的消息传递软件系统还有Vertex,PARMACS,Zipcode,UNIFY和PICL等.1消息传递库消息传递库(Message-PassingLibraries)耽匿搓煌溅观拭宦泅迷翌忆溉次各赞四验旅贱诛晾荤逆镊妨胳铱蛾拟穗喝第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)在当前所有的消息传递软件中在当前所有的消息传递软件中, , 最重要最流行的是最重要最流行的是MPIMPI和和PVM, PVM

5、, 它们能运行在所有的并行平台上它们能运行在所有的并行平台上, , 包括包括SMPSMP和和PVP. PVP. 二者二者已经在已经在WindowsNT和和Windows95这样的非这样的非Unix平平台上实现台上实现.程序设计语言支持程序设计语言支持C,Fortran和和Java.在国产的三大并行机系列神威、银河和曙光上都实现了在国产的三大并行机系列神威、银河和曙光上都实现了对对MPIMPI和和PVMPVM和支持和支持. .1消息传递库消息传递库(Message-PassingLibraries)底栈男佣怯洽疽了用谆妥麦难揉掩函牵枫蟹羹苞袜格舟睛暇宣苏郸巍拥魁第十四章分布存储系统并行编程第十四

6、章分布存储系统并行编程国家高性能计算中心(合肥)1.1 MPI1.1 MPI(MessagePassingInterface) 简介简介1消息传递库消息传递库(Message-PassingLibraries)目标目标: : 是提供一个实际可用的、可移植的、高效的和灵活的是提供一个实际可用的、可移植的、高效的和灵活的消息传递接口标准消息传递接口标准. MPI. MPI以语言独立的形式来定义这个接口库以语言独立的形式来定义这个接口库, , 并提供了与并提供了与C C、FortranFortran和和JavaJava语言的绑定语言的绑定. . 这个定义不包含这个定义不包含任何专用于某个特别的制造商

7、、操作系统或硬件的特性任何专用于某个特别的制造商、操作系统或硬件的特性. . 由由于这个原因于这个原因, MPI, MPI在并行计算界被广泛地接受在并行计算界被广泛地接受. .荷亮戒赊谍宏殃兽掐诫喧节杰氰碌挫畦狸蕾卉喇讹琐搪揩刘迂督愁扳刁辐第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI的实现的实现建立在厂家专用的环境之上建立在厂家专用的环境之上IBMSP2的的POE/MPL,IntelParagon的的OSF/Nx公共的公共的MPI环境环境:CHIMPEdinburg大学大学LAN(LocalAreaMulticomputer)Ohio超级计算中心超级

8、计算中心MPICHArgonne国家实验室与国家实验室与Mississippi州立大学州立大学MPICH是是MPI在各种机器上的可移植实现在各种机器上的可移植实现,可以安装在几乎所有的平台上可以安装在几乎所有的平台上:PC工作站工作站SMPMPPCOW1消息传递库消息传递库(Message-PassingLibraries)犹辅爵果题距舷陨远柯未渣仟速秦迷址侄宿淄游凡赶馁迂削妙哆哦煤杠粳第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1.2PVM(ParallelVirtualMachine)简介简介开发时间开发时间:始于始于1989年年开发单位开发单位:美国

9、美国Tennessee大学、大学、OakRidge国家实验室和国家实验室和Emory大学联合研制大学联合研制特点特点:具有较好的适应性、可扩展性、可移植性和易使用性等具有较好的适应性、可扩展性、可移植性和易使用性等特点特点,源代码可以免费获取源代码可以免费获取,现已被用户广泛采纳现已被用户广泛采纳.现状现状:目前对它的研究和开发工作仍在各大学和研究机构进行目前对它的研究和开发工作仍在各大学和研究机构进行.尽管已经有越来越多的人开始使用尽管已经有越来越多的人开始使用MPI,但但PVM仍然是做并行仍然是做并行处理最流行的软件之一处理最流行的软件之一.随着它的不断流行随着它的不断流行,已经被移植到已

10、经被移植到PVP,SMP,MPP,工作站和工作站和PC组成的机群系统组成的机群系统.1消息传递库消息传递库(Message-PassingLibraries)割逃赔凸贵眉板为屁獭现杯臣颂躲桓揣制锡泊乙僳今伸媚爽彰嫁巫练肮秤第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)PVMPVM和和MPIMPI间的主要差别间的主要差别: :(1)PVM(1)PVM是一个自包含的系统是一个自包含的系统, , 而而MPIMPI不是不是. MPI. MPI依赖于支持依赖于支持它的平台提供对进程的管理和它的平台提供对进程的管理和I/OI/O功能功能. . 而而PVMPVM本身就包含

11、本身就包含这些功能这些功能. .(2) MPI(2) MPI对消息传递提供了更强大的支持对消息传递提供了更强大的支持. . (3) PVM(3) PVM不是一个标准不是一个标准, , 这就意味着这就意味着PVMPVM可以更方便、更频可以更方便、更频繁地进行版本更新繁地进行版本更新. . MPIMPI和和PVMPVM在功能上现在正趋于相互包含在功能上现在正趋于相互包含. . 例如例如, MPI-2, MPI-2增增加了进程管理功能加了进程管理功能, , 而现在的而现在的PVMPVM也提供了更多的群集通也提供了更多的群集通信函数信函数. . 与与MPIMPI不同的是不同的是, , 1消息传递库消息

12、传递库(Message-PassingLibraries)嵌符瘟截跋岛由戏鼠祖鞍兼涂刹蓬肛廉鲍梳杯搏词弗瘟洗乾痪娜运干坍渤第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1.2Message-PassingModes关于通信模式关于通信模式, , 用户需要理解的有三个方面用户需要理解的有三个方面: : 共有多少个进程共有多少个进程? ? 进程间如何同步进程间如何同步? ? 如何管理通信缓冲区如何管理通信缓冲区? ?现在的消息传递系统多使用三种通信模式现在的消息传递系统多使用三种通信模式: :同步的消息传递同步的消息传递(SynchronousMessagePa

13、ssing)阻塞的消息传递阻塞的消息传递(BlockingMessagePassing)非阻塞的消息传递非阻塞的消息传递(NonblockingMessagePassing)2消息传递方式消息传递方式徽宴苦泣疡王搀拟苹靠供棘融返纶丽谗颠浮肢哨蝗芹茎昭疑弯执逛甸昧玫第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)发送例程接收例程进程Q接收返回点开始接收点R_syn1S_Block2S_Non_Block3进程P开始发送点发送返回点S_syn1R_block2R_Non_Block3系统进程等待发送点2消息传递方式消息传递方式另旬宛谜交僳恤拧寒机忘独柱料颖山揣骤蔚

14、缉本刺笨懒翻牧苍峦市峨俐石第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)ProcessP:M=10;L1: send MtoQ;L2:M=20;gotoL1;ProcessQ:L1:S=-100;L2: receive SfromP;X=S+1;例例2.1 2.1 消息传递中的发送和接收缓冲消息传递中的发送和接收缓冲M称为发送消息缓冲称为发送消息缓冲(sendmessagebuffer,orsendbuffer)S称为接收消息缓冲称为接收消息缓冲(receivemessagebuffer,orreceivebuffer)2消息传递方式消息传递方式誓逆蚤梗巡陨

15、意卉浓肩驶怪窍垂币衰声羞堰寥韵尿嗓曲赣毫索拿跌等墅准第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)三种通信模式的比较2消息传递方式消息传递方式尿哮盂序婶野文照影毙豪句了捧拧硒拇捐惯藏团遂擦氰自南酝辈抹蒙橱捷第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)ProcessP:M=10;send MtoQ;do some computation which does not change M;wait forMto be sent;M=20;ProcessQ:S=-100;receive SfromP;do some comput

16、ation which does not use S;wait forSto be received;X=S+1;例例2.22.2 非阻塞模式下非阻塞模式下, , 强制进程等待直到安全时再继续执行强制进程等待直到安全时再继续执行非阻塞模式本身也会带来一些额外开销非阻塞模式本身也会带来一些额外开销: : 作为临时缓冲区用的内存空间作为临时缓冲区用的内存空间 分配缓冲区的操作分配缓冲区的操作 将消息拷入和拷出临时缓冲区将消息拷入和拷出临时缓冲区 执行一个额外的检测和等待函数执行一个额外的检测和等待函数2消息传递方式消息传递方式调收氨级乘象烧瑟议赠煤挨繁喊奋庙饱石摔晚杭客睡批僚强捌恶在筐寨蔡第十四章

17、分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)消息传递的特点消息传递的特点: : 在消息传递模型中在消息传递模型中, , 一个并行应用由一组进程组成一个并行应用由一组进程组成, , 每个进程的代码是本每个进程的代码是本地的地的, , 只能访问私有数据只能访问私有数据, , 进程之间通过传递消息实现数据共享和进进程之间通过传递消息实现数据共享和进程同步程同步. . 优点优点: : 用户可以对并行性的开发、数据分布和通信实现完全控制用户可以对并行性的开发、数据分布和通信实现完全控制. . 缺点缺点: : (1)(1)要求程序员显式地处理通信问题要求程序员显式地处理通信问

18、题, , 如如, , 消息传递调用的位置消息传递调用的位置, , 数据移数据移动动, , 数据复制数据复制, , 数据操作数据操作, , 数据的一致性等等数据的一致性等等. . (2)(2)对大多数科学计算程序来说对大多数科学计算程序来说, , 消息传递模型的真正困难还在于显式的消息传递模型的真正困难还在于显式的域分解域分解, , 也就是说也就是说, , 将对相应数据的操作限定在指定的处理器上进行将对相应数据的操作限定在指定的处理器上进行, , 在每个处理器上只能看见整个分布数据的一部分在每个处理器上只能看见整个分布数据的一部分. . (3)(3)无法以渐进的方式、通过逐步将串行代码转换成并行

19、代码而开发出来无法以渐进的方式、通过逐步将串行代码转换成并行代码而开发出来. . 大量的散布在程序各处的域分解要求整个程序由串行到并行的转换一大量的散布在程序各处的域分解要求整个程序由串行到并行的转换一次性实现次性实现, , 而共享存储方法允许在现有的串行代码中插入并行说明从而共享存储方法允许在现有的串行代码中插入并行说明从而实现逐步转换而实现逐步转换. .与之相比与之相比, , 这是消息传递的一个明显的缺点这是消息传递的一个明显的缺点. . 2消息传递方式消息传递方式蛀沿游理暴瞬以舰杉完脖修禹酣术荧锅匿贱产族击厅桌好杠凉狸恫帅箍董第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高

20、性能计算中心(合肥)分布存储系统并行编程14.1 基于消息传递的编程14.2 MPI并行编程14.3 PVM并行编程14.4 基于数据并行的并行编程14.5 HPF并行编程税岁噎入姆乐幽童丛窒黍模捏国俩椿晦沽衰奖袜支蝉后乍导烃骂兽狐愚旧第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI并行编程1MPI中的消息中的消息2MPI中的消息信封中的消息信封3MPI中的四种通信模式中的四种通信模式4点对点的通信点对点的通信5群集通信群集通信6MPI扩展扩展7例子例子:计算计算Pi的的MPI程序程序分争臂肃搁屑芋睁氧屑斯它腻骗骸剔券坍堡杰视擂卢曰龟估尿蛮欲澜舱赖第十四

21、章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1MPI中的消息中的消息第五讲#includempi.hintfoo(i)inti;.main(argc,argv)intargc;char*argvinti,tmp,sum=0,group_size,my_rank,N;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&group_size);MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);if(my_rank=0)printf(EnterN:);scanf(%d,&N);for(i=

22、1;igroup_size;i+)MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD);for(i=my_rank;iN;i=i+group_size)sum=sum+tmp;for(i=1;igroup_size;i+)MPI_Recv(&tmp,1,MPI_INT,i,i,MPI_COMM_WORLD,&status);sum=sum+tmp;printf(nTheresult=%d,sum);elseMPI_Recv(&N,1,MPI_INT,i,i,MPI_COMM_WORLD,&status);for(i-my_rank;iN;i=i+group_siz

23、e)sum=sum+foo(i);MPI_Send(&sum,1,MPI_INT,0,i,MPI_COMM_WORLD);MPI_Finalize();例例1.1一个计算一个计算foo(i)的的MPISPMD消消息传递程序息传递程序,存放在文件存放在文件“myprog.c”中中初始化初始化MPI环境环境得到缺省的进程组大小得到缺省的进程组大小得到每个进程在组得到每个进程在组中的编号中的编号发送消息发送消息接收消息接收消息终止终止MPIMPI环境环境伯虽峨与撇莎遥钠泻油吓垫剃害娶篇闯染敛邓允卫菇瞅垄秒竖吝谤澳彭对第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)这

24、个程序用以下并行C编译器mpcc来编译:执行下列命令将可执行程序myprog加载到n个节点上: yprogMPIRUNmyprognpnMPI进程是重型的单线进程. 它们拥有不同的地址空间. 因此, 一个进程不能直接访问另一个进程地址空间的中的变量. 进程间的通信用消息传递来实现. 1MPI中的消息中的消息纫鞭脸周凳评软们伺荣抨怜矽枷剁渊旱啼荷凉柴啥开辈临睡钢帮臭游犹缕第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)为什么为什么MPI中的发送和接收操作要做得这么复杂呢中的发送和接收操作要做得这么复杂呢?MPI消息的组成消息的组成:消息的内容消息的内容(即即,信

25、的内容信的内容),称为消息缓冲称为消息缓冲(messagebuffer)消息的接收者消息的接收者(即即,写在信封上面的东西写在信封上面的东西),称为消息信封称为消息信封(messageenvelop)MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD)MPI_Recv(&N,1,MPI_INT,0,i,MPI_COMM_WORLD,&status)sendMtoQ;receiveSfromP1MPI中的消息中的消息盼财酬豆致裴荡芜蝇敝叉毅隔擅批矩糠缩陛尺氯格袄梭捶情栗届让反蛾獭第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)考虑一

26、个用考虑一个用C语言声明的由语言声明的由N个复数组成的数组个复数组成的数组doubleA100假定进程假定进程P要把这个数组发送给进程要把这个数组发送给进程Q:例例1用用MPI发送一个数据数组发送一个数据数组1MPI中的消息中的消息柞霍膨晒澳摧泞蓑风菇举废泽贿留泥舜咬膘焦壤亭厢贺丝逼湃膳戊综汽挟第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1MPI中的消息中的消息沂掷第涯例耍耶潭肉转耀岛莆环厌溯内读网哩棉籽哇跑崇斌走荤秽线假棋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI_Send(&N,1,MPI_INT,i,i,

27、MPI_COMM_WORLD)子程序名消息地址消息长度消息数据类型接收进程标识号消息标签通信子MPI_Send(buffer,count,datatype,destination,tag,communicator)(buffer,count,datatype)消息缓冲消息缓冲(destination,tag,communicator)消息信封消息信封1MPI中的消息中的消息鸡姆桌绵乎却地砒者掸身薯角播蛾熙彻灌醇涉好权厂茹叼梯挛诚棱灾际奶第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)消息数据类型消息数据类型(messagedatatypes)通信子通信子(co

28、mmunicators)通信操作通信操作(communicationoperations)虚拟拓扑虚拟拓扑(virtualtopology)MPI的的四个重要概念四个重要概念:1MPI中的消息中的消息靛大掘修芭泻分谈狭跃铂鳞剁呵卡另爷彰昼竞唉颧薯硷总消懦竣晃速乔基第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)理由有两个理由有两个: : 一是支持异构计算一是支持异构计算 另一是允许非连续另一是允许非连续, , 非均匀内存区中的消息非均匀内存区中的消息. .异构计算异构计算(heterogeneouscomputing):指的是在由不同计算机指的是在由不同计算机

29、, , 如工作站网络如工作站网络, , 组成的系统上运行应用程序组成的系统上运行应用程序. . 系统中的每台计算系统中的每台计算机可能由不同的厂商生产、使用不同的处理器和操作系统机可能由不同的厂商生产、使用不同的处理器和操作系统当这些计算机使用不同的数据表示时如何保证互操作性当这些计算机使用不同的数据表示时如何保证互操作性. .为什么需要定义消息数据类型为什么需要定义消息数据类型? ?1MPI中的消息中的消息筑坤陕护宗饥穆致潦零纪晦硒参辩粟吾脆篮港挎拄幽镍帕懂种赏嚏烩混锥第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1MPI中的消息中的消息肘鬼够毡鬼街钠文拉

30、浙且沙陛洲淄阶弯源碘斯傀辕恭纸尊化壹噬菠钨技锋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例2发送非连续数据项发送非连续数据项doubleA100;MPI_Pack_size(50,MPI_DOUBLE,comm,&BufferSize);TempBuffer=malloc(BufferSize);j=sizeof(MPI_DOUBLE);Position=0;for(i=0;i50;i+)MPI_Pack(A+i*j,1,MPI_DOUBLE,TempBuffer,BufferSize,&Position,comm);MPI_Send(TempBuff

31、er,Position,MPI_PACKED,destination,tag,comm);描须谜逛菱假任贮枢湿副趟蚕旦渊知邪饰罕猩手贪爪凶踌哲扫木泵听喇厦第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)在下面的消息中在下面的消息中, , 假定每个双精度数有假定每个双精度数有8 8字节长字节长, , 一个字符是一个字符是1 1字节字节, , 一个一个整型数是整型数是4 4字节字节. . 例例3在消息传递中发送一个混合数据类型在消息传递中发送一个混合数据类型痛纤形滔叶凛抡谩酥艾犊洛陕留嘛毙狭篱宦钨成掀审淹愉伙掂溉挺刑鳖雹第十四章分布存储系统并行编程第十四章分布存储

32、系统并行编程国家高性能计算中心(合肥)例例4发送一数组的发送一数组的所有偶序数元素所有偶序数元素doubleA100;MPI_Data_typeEvenElements;.MPI_Type_vector(50,1,2,MPI_DOUBLE,&EvenElements);MPI_Type_commit(&EvenElements);MPI_Send(A,1,EvenElements,destination,.);给噎点屠腥变脓宠狞板懦惊怠钡沤聘胯枫般奖做颁上余芝乍芯谩畦碍诵闲第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)说明说明:MPI_Type_vector

33、(count,blocklength,stride,oldtype,&newtype)是构造导出数据类型的MPI例程.导出类型newtype由blocks的拷贝count份组成.每块(blocks)由已有的数据类型oldtype的blocklength份连续项的拷贝组成.stride定义每两个连续的块之间的oldtype元素个数.因此,(stride-blocklength)即是两个块之间的间隔.1MPI中的消息中的消息殃疥遗挽娠妥掇萝盗盒拘哩徊倒檀梦堆荫订凶划笼契仰幻袄夯读礁泥刮橙第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)消息缓冲消息缓冲(messag

34、ebuffer,简称简称buffer),在不同的消息传递使用场合有不同在不同的消息传递使用场合有不同的含义的含义.下面给出一些例子下面给出一些例子:消息缓冲指的是由程序员定义的应用程序的存储区域消息缓冲指的是由程序员定义的应用程序的存储区域,用于存放消用于存放消息的数据值息的数据值.例如例如,在在Send(A,16,Q,tag)中中,缓冲缓冲A是在用户应用程序中声明的变量是在用户应用程序中声明的变量.该缓冲的起始地址在消息例程中被使用该缓冲的起始地址在消息例程中被使用.消息缓冲也可以指由消息传递系统消息缓冲也可以指由消息传递系统(而非用户而非用户)创建和管理的一些内创建和管理的一些内存区存区,

35、它用于发送消息时暂存消息它用于发送消息时暂存消息.这种缓冲不在用户的应用程序中出这种缓冲不在用户的应用程序中出现现,有时被称为系统消息缓冲有时被称为系统消息缓冲(或系统缓冲或系统缓冲).MPI允许第三种可能的定义允许第三种可能的定义.用户可以划出一定大小的内存区用户可以划出一定大小的内存区,作为作为出现在其应用中的任意消息的中间缓冲出现在其应用中的任意消息的中间缓冲.消息缓冲消息缓冲1MPI中的消息中的消息焦擂羡陇裴复菜哪痉掷腐刽狙镍黔届并山牟催渣现躇货铜肌溺赋毖缓从缕第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)考虑下列代码考虑下列代码,由进程由进程P传送

36、一个存放在数组传送一个存放在数组A中的消息中的消息M,到到进程进程Q的数组的数组B中中.例5在一对进程间发送消息1MPI中的消息中的消息酒钉写野唇炼具腥冠肥锌唤惺糊玉颇呐羔细骋函拥箭衙舔毙舰牵答鼓蒸汗第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)ProcessPAMProcessQBProcessPAMProcessQBSProcessPAMProcessQBT(a)只使用用户缓冲(b)使用系统缓冲S(c)使用了用户级的临时缓冲TProcessP:doubleA2000000;send(A,32,Q,tag);ProcessQ:doubleB32;recv(

37、B,32,P,tag)挺帖连升培忿璃组弱唬啸毙喜迄般悄榆鹿候载攻诌样扦胰韦雀菱暗陡赔钻第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)用户如何来定义消息的接收者呢?在下面列出的MPI发送例程中,消息信封由三项组成.MPI_Send(address,count,datatype,destination, tag, communicator)destination域是一个整数,标识消息的接收进程.消息标签(messagetag),也称为消息类型(messagetype),是程序员用于标识不同类型消息、限制消息接收者的一个整数.2MPI中的消息信封中的消息信封踌坞卿

38、佩邹祥趁蜀且藏赵诬逢功踢痹伯扦鹅廉窑谗逻绒啪盛扰佑杯琼孟苯第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)为什么要使用消息标签为什么要使用消息标签(Tag)?未使用标签使用了标签为了说明为什么要用标签为了说明为什么要用标签,我们我们先来看右面一段没有使用标签先来看右面一段没有使用标签的代码的代码:这段代码打算传送这段代码打算传送A的前的前32个字节进入个字节进入X,传送传送B的前的前16个字个字节进入节进入Y.但是但是,如果消息如果消息B尽管尽管后发送但先到达进程后发送但先到达进程Q,就会被就会被第一个第一个recv()接收在接收在X中中.使用标签可以避免这个

39、错误使用标签可以避免这个错误.2MPI中的消息信封中的消息信封史跳宪岁厨条民队蹲钠阿锗氦挨杠誓扮憾轴姻润这漱北枝术踪架迹绥赊扑第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)使用标签的另一个原因使用标签的另一个原因是可以简化对下列情形是可以简化对下列情形的处理的处理.假定有两个客户进程假定有两个客户进程P和和R,每个发送一个服务每个发送一个服务请求消息给服务进程请求消息给服务进程Q.例例6在消息传递中使用标签在消息传递中使用标签未使用标签未使用标签使用了标签使用了标签毫渔区仆腾维扯案纂帛族磕淋曾艾狐纪辆唇扦帽纺冶浓吧戊侨孟盅机拜仑第十四章分布存储系统并行编程第

40、十四章分布存储系统并行编程国家高性能计算中心(合肥)通信子通信子(communicator):一个进程组一个进程组(processgroup)+上下文上下文(context).进程组进程组:是进程的有限有序集是进程的有限有序集.有限意味着有限意味着,在一个进程组中在一个进程组中,进程的个数进程的个数n是有限的是有限的,这里的这里的n称为进程组的大小称为进程组的大小(groupsize).有序意味着有序意味着n个进程是按整数个进程是按整数0,1,.,n-1进行编号的进行编号的.一个进程在一个通信子一个进程在一个通信子(组组)中用它的编号进行标识中用它的编号进行标识.组的组的大小和进程编号可以通过

41、调用以下的大小和进程编号可以通过调用以下的MPI例程获得例程获得:MPI_Comm_size(communicator,&group_size)MPI_Comm_rank(communicator,&my_rank)什么是通信子什么是通信子? ?2MPI中的消息信封中的消息信封MPI_Send(address,count,datatype,destination,tag, communicator)诫汹镶滇氦熟洽墓仇灾就旷谤举败梆藤抱绝痪户旁袜赠祝冶条蛤丽锐接僳第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例7通信子的使用2MPI中的消息信封中的消息信封Pr

42、ocess0:MPI_Send(msg1,count1,MPI_INT,1,tag1,comm1);parallel_fft(.);Process1:MPI_Recv(msg1,count1,MPI_INT,0,tag1,comm1);parallel_fft(.);if(my_rank=0)MPI_Send(msg2,count1,MPI_INT,1,tag2,comm2);含代码含代码含代码含代码邦除炙盈期唤责犊鼻赛勿挫勘侍饺足盔坯趋衷点全洒罩位养浙野思入仙旬第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)存在问题存在问题:不可能保证不可能保证tag1和和

43、tag2一定取了不同的值一定取了不同的值:标签是由用户定义的整数值标签是由用户定义的整数值,用户可能会出错用户可能会出错.即使用户不会弄错即使用户不会弄错,也难以或不可能保证也难以或不可能保证tag1和和tag2有不同有不同的值的值.函数函数parallel_fft()可能是由其它用户写的可能是由其它用户写的,或者它是一或者它是一个库例程个库例程.这样这样,用户可能不知道用户可能不知道tag2的值的值.即使用户总能知道即使用户总能知道tag2的值的值,仍然可能出错仍然可能出错.因为因为MPI_Recv例程可能决定使用一个通配的例程可能决定使用一个通配的(wildcard)标签标签MPI_Any

44、_tag.解决办法解决办法:在在parallel_fft()中的通信使用不同的通信子中的通信使用不同的通信子,它可能它可能包含相同的进程组包含相同的进程组(如如,进程进程0和和1),但每个通信子有系统指定的但每个通信子有系统指定的不同的上下文不同的上下文,与与comm1的不同的不同.因此因此,MPI_Recv不再有偶然不再有偶然会从会从parallel_fft()的的MPI_Send中接收中接收msg2的危险了的危险了.2MPI中的消息信封中的消息信封捎轧级酮隶靴埂诽供踏钎朽裁辜疾毋犹猫柞河佩敏禹蔗疮柒碗谱谈争八瞎第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥

45、)考虑如下由考虑如下由10个进程执行的代码个进程执行的代码:例例8MPI中的新通信子中的新通信子2MPI中的消息信封中的消息信封MPI_CommMyWorld,SplitWorld;intmy_rank,group_size,Color,Key;MPI_Init(&argc,&argv);MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld);MPI_Comm_rank(MyWorld,&my_rank);MPI_Comm_size(MyWorld,&group_size);Color=my_rank%3;Key=my_rank/3;MPI_Comm_split(MyWor

46、ld,Color,Key,&SplitWorld);滑蛾弄录寻抿器细劣钒骚砖怎剧翱弄斩辱僧二烁艺烩办锣锰痕鹊掸榆弯谎第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI_Comm_dup(MPI_COMM_WORLD,&MyWorld)将创建一个新的通信子将创建一个新的通信子MyWorld,它是包含与原始它是包含与原始的的MPI_COMM_WORLD相同的相同的10个进程的进程组个进程的进程组,但但有不同的上下文有不同的上下文.2MPI中的消息信封中的消息信封膳岳激冉静媚溉洗诱涣学丫绕茸河狐至增吾萌渤厂蹈颁哼筒砾酥瀑枉溃别第十四章分布存储系统并行编程第十四章

47、分布存储系统并行编程国家高性能计算中心(合肥)MPI-1被设计成使不同通信子中的通信是相互分开被设计成使不同通信子中的通信是相互分开的的,以及任何群集通信是与任何点对点通信分开的以及任何群集通信是与任何点对点通信分开的,即使即使它们是在相同的通信子内它们是在相同的通信子内.通信子概念尤其方便了并行库通信子概念尤其方便了并行库的开发的开发.MPI-1只支持组内通信只支持组内通信(intra-communication)MPI-2支持组间通信支持组间通信(inter-communication)2MPI中的消息信封中的消息信封招礼聂脸搀很族仿旷假惜皮事景肿驻陡弟旬概冈从圣顷撩叛蜕柴置矾呕瓜第十四章

48、分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI消息特性的总结消息特性的总结发送者进程总结如下发送者进程总结如下例子例子: :MPI_Send(&N,1,MPI_INT,i,i,MPI_COMM_WORLD);第一个参数指明消息缓存的起始地址第一个参数指明消息缓存的起始地址,即存放要发送的数据信即存放要发送的数据信息息.第二个参数指明消息中给定的数据类型有多少项第二个参数指明消息中给定的数据类型有多少项,这个数据类这个数据类型由第三个参数给定型由第三个参数给定.数据类型要么是基本数据类型数据类型要么是基本数据类型,要么是导出数据类型要么是导出数据类型,后者由后者

49、由用户生成指定一个可能是由混合数据类型组成的非连续数据项用户生成指定一个可能是由混合数据类型组成的非连续数据项.第四个参数是目的进程的标识符第四个参数是目的进程的标识符(进程编号进程编号)第五个是消息标签第五个是消息标签第六个参数标识进程组和上下文第六个参数标识进程组和上下文,即即,通信子通信子.通常通常,消息只在消息只在同组的进程间传送同组的进程间传送.但是但是,MPI允许通过允许通过intercommunicators在在组间通信组间通信.MPI_Send(buffer,count,datatype,destination,tag,communicator)臃洛稍母索糠症聚巫拓蓖煎坊送乍淫

50、架噬岂刁一秧岔赠白窥呸燎真怕窑慧第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)发送者进程总结如下发送者进程总结如下例例: :MPI_Recv(&tmp,1,MPI_INT,i,i,MPI_COMM_WORLD,&Status) 第一个参数指明接收消息缓冲的起始地址第一个参数指明接收消息缓冲的起始地址,即存放接收消息的内存地址即存放接收消息的内存地址第二个参数指明给定数据类型的最大项数第二个参数指明给定数据类型的最大项数,它存放在第三个参数内它存放在第三个参数内,可以被可以被接收接收.接收到的实际项数可能少一些接收到的实际项数可能少一些第四个参数是源进程标识符

51、第四个参数是源进程标识符(编号编号)第五个是消息标签第五个是消息标签第六个参数标识一个通信子第六个参数标识一个通信子第七个参数是一个指针第七个参数是一个指针,指向一个结构指向一个结构MPI_StatusStatus存放了各种有关接收消息的各种信息存放了各种有关接收消息的各种信息.Status.MPI_SOURCE实际的源进程编号实际的源进程编号Status.MPI_TAG实际的消息标签实际的消息标签实际接收到的数据项数由实际接收到的数据项数由MPI例程例程MPI_Get_count(&Status,MPI_INT,&C)读出读出.这个例程使用这个例程使用Status中的信息来决定给定数据类型中

52、的信息来决定给定数据类型(在这里是在这里是MPI_INT)中的实际项数中的实际项数,将这个数放在变量将这个数放在变量C中中.这两个域可以是这两个域可以是wildcardMPI_Any_source和和MPI_Any_tag.MPI_Recv(address,count,datatype,source,tag,communicator,status)采湛均滨榴烷上四炬妹术肋犯蔑缄邦状污幼铅畔拟脏问舶赚气瞻惫但链禽第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)当一个接收者能从不同进程接收不同大小和标签的信息当一个接收者能从不同进程接收不同大小和标签的信息时时,状

53、态信息就很有用状态信息就很有用.例例9 9 消息传递中的状态消息传递中的状态(Status)(Status)字字2MPI中的消息信封中的消息信封while(true)MPI_Recv(received_request,100,MPI_BYTE,MPI_Any_source,MPI_Any_tag,comm,&Status);switch(Status.MPI_Tag)casetag_0:performservicetype0;casetag_1:performservicetype1;casetag_2:performservicetype2;仰先挺秒度巡裤脱忙席恤害贺擒镣瓤则尧恿塔顺之宠暇袍

54、扰寥漾慑弹埋踞第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)用在用在MPI中的通信模式中的通信模式(communicationmode)同步的同步的(synchronous)直到相应的接收已经启动发送才返回直到相应的接收已经启动发送才返回,因此接收端要有存因此接收端要有存放到达消息的应用缓冲放到达消息的应用缓冲.注意注意:在在MPI中可以有非阻塞的同步发送中可以有非阻塞的同步发送,它的返回不意味着它的返回不意味着消息已经被发出消息已经被发出!它的实现不需要在接收端有附加的缓冲它的实现不需要在接收端有附加的缓冲,但但需要在发送端有一个系统缓冲需要在发送端有一个

55、系统缓冲.为了消除额外的消息拷贝为了消除额外的消息拷贝,应应使用阻塞的同步发送使用阻塞的同步发送.3MPI中的四种通信模式中的四种通信模式SRSynchronous123醒盒忆拳娟泌袁盅泻错讯酉磅堪冈棚鸦阶煤蚂跋鞭辗毖诬境陀炎乳名教枕第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)缓冲的缓冲的(buffered)缓冲的发送假定能得到一定大小的缓冲空间缓冲的发送假定能得到一定大小的缓冲空间,它必须事它必须事先由用户程序通过调用子例程先由用户程序通过调用子例程MPI_Buffer_attch(buffer,size)来定义来定义,由它来分配大小为由它来分配大小为s

56、ize的用户缓冲的用户缓冲.这个缓冲可以用这个缓冲可以用MPI_Buffer_detach(*buffer,*size)来实现来实现.SRBuffer123MPI中的四种通信模式中的四种通信模式狠诬吓耙薪新范脐因恐房辰凌皱闲掠贫澜虑湍软渴涛颗糕赐猜萨铺发良徒第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)StandardSR1SRReady12标准的标准的(standard)发送可以是同步的或缓冲的发送可以是同步的或缓冲的,取决于实现取决于实现.就绪的就绪的(ready)在肯定相应的接收已经开始才进行发送在肯定相应的接收已经开始才进行发送.它不像在同步模它不像

57、在同步模式中那样需要等待式中那样需要等待.这就允许在相同的情况下实际使用一这就允许在相同的情况下实际使用一个更有效的通信协议个更有效的通信协议.3MPI中的四种通信模式中的四种通信模式押消压际耽帜哲躯恐末例么任汀逛湛敞人巳弃哭渐糠昨佣沈无择县玖木溉第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)4点对点的通信点对点的通信曹获爆胡罢替缮忻庙逮博粕风施泊璃流珠窄予轴业瞻嘎晓意返烬瞅嘶卤与第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例10使用消息传递的进程流水线使用消息传递的进程流水线X=P(W)WY=Q(X)XZ=R(Y)Y

58、Z进程流水线中的数据流进程流水线中的数据流图中是一条三进程的流水线图中是一条三进程的流水线, , 一个进程连续地从左边接收一个一个进程连续地从左边接收一个输入数据流输入数据流, , 计算一个新的值计算一个新的值, , 将它发送给右边将它发送给右边. .下面的代码下面的代码示出了基本思想示出了基本思想. .进程进程Q的一段代码的一段代码while(Not_Done)MPI_Irevc(NextX,.);MPI_Isend(PreviousY,.);CurrentY=Q(CurrentX);4点对点的通信点对点的通信摧间陇懒章迸估芒沤姬惧业驱帅沦婚夕臣倚隅蒲物耳捂窟伟禹僚熄低玖涌第十四章分布存储系

59、统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)进程进程Q的代码的代码while(Not_Done)if(X=Xbuf0)X=Xbuf1;Y=Ybuf1;Xin=Xbuf0;Yout=Ybuf0;elseX=Xbuf0;Y=Ybuf0;Xin=Xbuf1;Yout=Ybuf1;MPI_Irevc(Xin,.,recv_handle);MPI_Isend(Yout,.,send_handle);Y=Q(X);/*重迭计算重迭计算*/MPI_Wait(recv_handle,recv_status);MPI_Wait(send_handle,send_status);Xbuf0Re

60、ceiveXY=Q(X)YBuf0SendYXbuf1Ybuf1进程流水线中的双缓冲进程流水线中的双缓冲4点对点的通信点对点的通信埠潜钩叮涝娘证臂郭穗循育肉年救蓝人熙咀貌腻涂假羚毖骨施鸣口圃四漱第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例11发送和接收中的死锁发送和接收中的死锁这是一段错误代码这是一段错误代码,可能会有下列结果可能会有下列结果:死锁死锁.例程例程MPI_Issend是非阻塞的、同步的发送是非阻塞的、同步的发送.它直到相应的它直到相应的MPI_Irecv已经启动执行才返回已经启动执行才返回,如果条件如果条件Y=5不为真不为真,则则MPI_

61、Irecv就就不会被执行不会被执行.Y为为0.假定当假定当if语句被执行后语句被执行后Y=5为真为真.则则MPI_Irecv会从进程会从进程P接收接收X的值的值(为为0)到它的变量到它的变量Y,并打印它并打印它.Y为为5.另一个可能的情况是当另一个可能的情况是当Y=5为真时为真时,打印会在接收到打印会在接收到X的值并存的值并存入入Y之前执行之前执行(因为因为MPI_Irecv是非阻塞的接收是非阻塞的接收).因此打印出的是因此打印出的是Y的旧值的旧值.ProcessP:.X=0;MPI_Issend(&X,.,Q,.);ProcessQ.if(Y=5)MPI_Irecv(&Y,.,P,.);pr

62、intf(“Yis%d”,Y);4点对点的通信点对点的通信痘秆寒恨料滑恐省鸿宛服埔诸溺柄沫茶钉亏敏贺职新旗赵瑚伸携提攀尚上第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)广播广播(Broadcast)MPI_Bcast(Address,Count,Datatype,Root, Comm)在下列在下列broadcast操作中操作中,标号为标号为Root的进程发送相的进程发送相同的消息给标记为同的消息给标记为Comm的通信子中的所有进程的通信子中的所有进程.消消息息的的内内容容如如同同点点对对点点通通 信信 一一 样样 由由 三三 元元 组组(Address,Co

63、unt,Datatype)标标识识.对对Root进进程程来来说说,这这个个三三元元组组既既定定义义了了发发送送缓缓冲冲也也定定义义了了接接收收缓缓冲冲.对对其其它它进进程程来来说说,这这个个三三元元组组只只定义了接收缓冲定义了接收缓冲.5群集通信群集通信桩臂寇嚷获秦逼腾轰形俗墓闸尖茎虹滞掇鉴谰憎申傅淳著饿水腥申四槛锥第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)聚集聚集(Gather)MPI_Gather(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Co

64、mm)5群集通信群集通信播撒播撒(Scatter)MPI_Scatter(SendAddress,SendCount,SendDatatype,RecvAddress,RecvCount,RecvDatatype,Root,Comm)秋烧恭祭夹畦斟变印褪伊岔舒耙海住涨纺钦蝉娠瘸钎明望媒酚痉享酉遍郴第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI_ScatterScatter只执行与只执行与Gather相反的操作相反的操作.Root进程发送给所有进程发送给所有n个进程发送一个不同的个进程发送一个不同的消息消息,包括它自已包括它自已.这这n个消息在个消息在R

65、oot进程进程的发送缓冲区中按标号的顺序有序地存的发送缓冲区中按标号的顺序有序地存放放.每个接收缓冲由三元组每个接收缓冲由三元组(RecvAddress,RecvCount,RecvDatatype)标识标识.所有的所有的非非Root进程忽略发送缓冲进程忽略发送缓冲.对对Root进程进程,发送缓冲由三元组发送缓冲由三元组(SendAddress,SendCount,SendDatatype)标识标识.5群集通信群集通信MPI_GatherRoot进程从进程从n个进程的每一个接收各个进个进程的每一个接收各个进程程(包括它自已包括它自已)的消息的消息.这这n个消息的连接个消息的连接按序号按序号ra

66、nk进行进行,存放在存放在Root进程的接收进程的接收缓冲中缓冲中.每个发送缓冲由三元组每个发送缓冲由三元组(SendAddress,SendCount,SendDatatype)标识标识.所有非所有非Root进程忽略接收缓冲进程忽略接收缓冲.对对Root进程进程,发送缓冲由三元组发送缓冲由三元组(RecvAddress,RecvCount,RecvDatatype)标识标识.恼岩胚道震肖万观邯霞裴衅冰乳首疡慰耍耕晶询纠炭闽腔郭诅晚蜕觅猜事第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)扩展的聚集和播撒操作扩展的聚集和播撒操作AllgatherMPI_Allg

67、ather(SendAddress,SendCount,SendDatatype,RecvAddress, RecvCount, RecvDatatype, Comm)5群集通信群集通信做蝗冻阑弯屡嘉虽玲放锦饮求魂瞄疤芒借抱团欲腹祭酶丸赌逗暴晨鸭在宣第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)全局交换全局交换(TatalExchange)每个进程发送一个消息给所有每个进程发送一个消息给所有n个进程个进程,包括它自已包括它自已.这这n个消息个消息在它的发送缓冲中以标号的顺序在它的发送缓冲中以标号的顺序有序地存放有序地存放.从另一个角度来看从另一个角度来看这个

68、通信这个通信,每个进程都从每个进程都从n个进程个进程接收一个消息接收一个消息.这这n个消息以标号个消息以标号的顺序被连接起来的顺序被连接起来,存放在接收存放在接收缓冲中缓冲中.注意注意,全局交换等于由全局交换等于由n个不同进程做的个不同进程做的n次次Gather操作操作.因此因此,不再需要不再需要Root参数参数.所有对所有对所有所有,在一次全局交换中共有在一次全局交换中共有n2个消息进行通信个消息进行通信.MPI_Alltoall(SendAddress,SendCount,SendDatatype,RecvAddress, RecvCount, RecvDatatype, Comm)5群集

69、通信群集通信獭越调嗣侦拿粟筛骏变溶淮追输故霉豆啪脸搭畴烂芜劳首择签建题剪胡敌第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI提供了两种类型的聚合操作提供了两种类型的聚合操作:归约归约(reduction)和扫描和扫描(scan).归约归约(reduction)MPI_Reduce(SendAddress,RecvAddress,Count,Datatype,Op,Root,Comm)这里每个进程的部分值存放在这里每个进程的部分值存放在SendAddress中中.所有进程将这所有进程将这些值归约为最终结果并将它存入些值归约为最终结果并将它存入Root进程的

70、进程的RecvAddress.数数据项的数据类型在据项的数据类型在Datatype域中定义域中定义.归约操作由归约操作由Op域定义域定义.聚合聚合(Aggregation)5群集通信群集通信礁溉怖斜盏深给量殉边嫩帅酝孺哟骗树毙慢览捂悦乱谊哈钵蕴奏骗呢通诲第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)扫描扫描(scan)MPI_scan(SendAddress,RecvAddress,Count,Datatype,Op,Comm)scan操作省去了操作省去了Root域域,因为因为scan是将部分值组合成是将部分值组合成n个个最终值最终值,并存放在并存放在n个进

71、程的个进程的RecvAddress.scan操作由操作由Op域域定义定义.MPI的的reduction和和scan操作允许每个进程贡献向量值操作允许每个进程贡献向量值,而不而不只是标量值只是标量值.向量的长度由向量的长度由Count定义定义.MPI支持用户自定义支持用户自定义的的reduction和和scan操作操作5群集通信群集通信上都御荫香躁叹扰阮敏断共绽湛马揉敛帖局咏挡怀瞥案默遵乔漂狐菊坝葵第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)在路障操作中在路障操作中,通信子通信子Comm中的所有进程相互同步中的所有进程相互同步,即即,它它们相互等待们相互等待

72、,直到所有进程都执行了他们各自的直到所有进程都执行了他们各自的MPI_Barrier函数函数.路障路障(Barrier)MPI_Barrier(Comm)5群集通信群集通信扯窖绒堡粘吸福涉坚辛雁矗戎四咐毁芯忱盐蜀锄峙寿辗桔箍踏蹬淳婴洲匈第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)5群集通信群集通信影鄂占语柄后弯竣伤必袋予枫赣芹允的孟沥鸡推婚瞎是阵佬榷明磺痰陈骨第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)通信子中的所有进程必须调用群集通信例程通信子中的所有进程必须调用群集通信例程.如果代码中只有通信子中如果代码中只有通信

73、子中的一部分成员调用了一个群集例程而其它没有调用的一部分成员调用了一个群集例程而其它没有调用,则是错误的则是错误的.一个错一个错误代码的行为是不确定的误代码的行为是不确定的,意味着它可能发生任何事情意味着它可能发生任何事情,包括死锁或产生包括死锁或产生错误的结果错误的结果.一个进程一旦结束了它所参与的群集操作就从群集例程中返回一个进程一旦结束了它所参与的群集操作就从群集例程中返回.除了除了MPI_Barrier以外以外,每个群集例程使用类似于点对点通信中的标准每个群集例程使用类似于点对点通信中的标准(standard)、阻塞的通信模式、阻塞的通信模式.例如例如,当当Root进程从进程从MPI_

74、Bcast中返回时中返回时,它就意味着发送缓冲的它就意味着发送缓冲的Address可以被安全地再次使用可以被安全地再次使用.其它进程可能还没有启动它们相应的其它进程可能还没有启动它们相应的MPI_Bcast!一个群集例程也许是也许不是同步的一个群集例程也许是也许不是同步的,取决于实现取决于实现.MPI要求用户负责要求用户负责保证他的代码无论实现是否是同步的都是正确的保证他的代码无论实现是否是同步的都是正确的.Count和和Datatype在所包含的所有进程中必须是一致的在所包含的所有进程中必须是一致的.在群集例程中没有在群集例程中没有tag参数参数.消息信封由通信子参数和源消息信封由通信子参数

75、和源/目的进程定义目的进程定义.例如例如,在在MPI_Bcast中中,消息的源是消息的源是Root,目的是所有进程目的是所有进程(包括包括Root).在在MPI-1中中,只支持阻塞和通信子内只支持阻塞和通信子内(intra-communicator)群集通信群集通信.群集例程的共同特点群集例程的共同特点5群集通信群集通信岔吐刽琴谍毅双嘱察倾概仰诱涪缉琢遏厅募伐混拒倦贡另逗斡忿纂眠酥互第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)6MPI扩展扩展MPI-2MPI-2对对MPI-1MPI-1的扩展的扩展动态进程动态进程单边通信单边通信非阻塞群集通信模式和通信子间

76、群集通信模式非阻塞群集通信模式和通信子间群集通信模式.对可扩展的对可扩展的I/O的支持的支持,叫做叫做MPI-IO.在在MPI-1中中,I/O问题全问题全部忽略部忽略.MPI-1只定义对只定义对Fortran77和和C语言的绑定语言的绑定.MPI-2将语言绑将语言绑定扩展到定扩展到Fortran90和和C+.对实时处理的支持对实时处理的支持.扩展了扩展了MPI-1的外部接口的外部接口,以便使环境工具的开发者更易于以便使环境工具的开发者更易于访问访问MPI对象对象.这将有助于开发剖析这将有助于开发剖析(profiling)、监视监视(monitoring)和调试和调试(debugging)工具工

77、具.靶齐傀胯日狼俺农迹切浙融甩纵醒句目神顾鲜狼蚀措申慌睫祖唇峪纯奏斋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)动态进程动态进程MPI-2决定支持动态进程决定支持动态进程,这带来了以下好处这带来了以下好处:MPI-1不定义如何创建进程和如何建立通信不定义如何创建进程和如何建立通信.因此因此,MPI-1需要支撑平台提供这种能力需要支撑平台提供这种能力,像像SP2中的中的POE和工作站网和工作站网络中的络中的rsh.MPI-2中的动态进程机制中的动态进程机制以可移植的方式以可移植的方式(平台平台独立独立)提供了这种能力提供了这种能力动态进程动态进程有利于将有利

78、于将PVM程序移植到程序移植到MPI上上.并且还可能并且还可能支持一些重要的应用类型支持一些重要的应用类型,如如,Client/Server和和Processfarm.动态进程动态进程允许更有效地使用资源和负载平衡允许更有效地使用资源和负载平衡.例如例如,所用所用节点数可以按需要减少和增加节点数可以按需要减少和增加支持容错支持容错.当一个结点失效当一个结点失效,运行在其上的进程能在另一运行在其上的进程能在另一个结点上创建一个新进程完成其工作个结点上创建一个新进程完成其工作.6MPI扩展扩展封逾柒因巩逞睬聂链可躲玩咐纸剿菱掠叭曾纲盼里速刮恋躁夹瘴织枚驮烹第十四章分布存储系统并行编程第十四章分布存

79、储系统并行编程国家高性能计算中心(合肥)intMPI_Spawn(char*command_line,intminprocs,intmaxprocs,char*info,introot,MPI_Commcomm,MPI_Comm*intercommint*array_of_errcodes)/* 可执行程序和参数可执行程序和参数 */* 最少要派生的进程数最少要派生的进程数 */* 最多要派生的进程数最多要派生的进程数 */* 在何处何时启动该进程在何处何时启动该进程 */* 根进程的编号根进程的编号 */* 根进程的通信子根进程的通信子 */* comm与新派生的进程组间的与新派生的进程组间

80、的互连通信子互连通信子*/* 每个派生进程一个出错代码每个派生进程一个出错代码 */这个函数试图派生这个函数试图派生maxprocs个子进程个子进程,每个子进程执行相同代码每个子进程执行相同代码,这个这个代码在代码在command_line中定义中定义.如果如果MPI不能派生不能派生maxprocs个进程个进程,它可以按它可以按minprocs指定的数目派生进程指定的数目派生进程.如果它连如果它连minprocs个进程都派生不了个进程都派生不了,MPI_Spawn就返回一个出错代码就返回一个出错代码.info必须是一个空串必须是一个空串,允许运行时系统决允许运行时系统决定何地、如何启动该进程定

81、何地、如何启动该进程.6MPI扩展扩展膛残卡淄诅俞减辟惩椰妻窥茄络窿引众稻沛沉蛊弦裙乏歹蹈势功蔼泽啥猖第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)MPI_Spawn是一个群集操作是一个群集操作,也就是说也就是说,通信子通信子comm中的中的所有成员必须调用它派生进程所有成员必须调用它派生进程.但是但是,只有只有root进程中的参数进程中的参数command_line,minprocs,maxprocs,和和info是有意义的是有意义的,而忽略而忽略其它进程上的这些参数值其它进程上的这些参数值.这样这样,尽管派生的进程可以看成尽管派生的进程可以看成comm中

82、所有进程的子进程中所有进程的子进程,但只有但只有root进程是真正的父进程进程是真正的父进程.子进程是子进程是MPI进程意味着它们必须调用进程意味着它们必须调用MPI_Initialize,它它与父进程中的与父进程中的MPI_Spawn同是群集操作同是群集操作.子进程和父进程可以子进程和父进程可以通过通过intercommunicatorintercomm进行通信进行通信,它从父进程中的它从父进程中的MPI_Spawn返回返回,子进程通过调用子进程通过调用MPI_parent函数能获得函数能获得intercommunicator的句柄的句柄.MPI_parent函数的形式如下函数的形式如下:i

83、ntMPI_Parent(MPI_Comm*intercomm)6MPI扩展扩展增歪五擦恳盈茵嚼脚捎掩颊咖凰训烃届肉畔慌鸯爷抹钒妥欧且稻缺尖邻谋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)单边通信单边通信MPI-2包括一个新的点对点通信模式包括一个新的点对点通信模式,叫做远程存储叫做远程存储访问访问(remotememoryaccess,RMA),它允许一个进程执行它允许一个进程执行单边通信单边通信.即即,一个进程可以发送一个数据值到一个目的地一个进程可以发送一个数据值到一个目的地,也可以从一个数据源取一个数据值也可以从一个数据源取一个数据值,无需另一边的

84、参与无需另一边的参与.在在MPI-1中中,所有的点对点通信都是双边的所有的点对点通信都是双边的,发送者和接收发送者和接收者都必需参与者都必需参与.6MPI扩展扩展絮啸罐酗锤胎童步迎烁饰漓始陈坟值烩举寒摘毋盗些剖逮薪院镁芒岿扑尚第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)intMPI_Get(void*dest_addr,MPI_Initdest_count,MPI_Datatypedest_datatype,intsource_rank,intsource_disp,intsource_count,MPI_Datatypesource_datatype,M

85、PI_Commcomm)单边接收单边接收(MPI_get)6MPI扩展扩展晃违兴插焚命溅子洼钩无饥袱撤锡沤曹绷佳蛇诈淳弦浊鳖个杆蛙疯验卷执第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)intMPI_Put(void*source_addr,MPI_Initsource_count,MPI_Datatypesource_datatype,intdest_rank,intdest_disp,intdest_count,MPI_Datatypedest_datatype,MPI_Commcomm)单边发送单边发送(MPI_Put)6MPI扩展扩展脖凿拜沟爸亨掐灌策

86、给羡弛忧吨黍辑呆官裙榔渠赞阀巢疟题趣潦辰奄锣女第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)7例子:计算Pi的MPI程序#include#include#includelongn,/*numberofslices*/i;/*slicecounter*/doublesum,/*runningsum*/pi,/*approximatevalueofpi*/mypi,x,/*independentvar.*/h;/*baseofslice*/intgroup_size,my_rank;main(argc,argv)intargc;char*argv;韩胚哇搽鬼娟躺

87、李烬毕囤农蚂木令增凌卡娜刘戴码溯瓦印何丧综翘根存厩第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)intgroup_size,my_rank;MPI_Statusstatus;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);MPI_Comm_size(MPI_COMM_WORLD,&group_size);n=2000;/*Broadcastntoallothernodes*/MPI_Bcast(&n,1,MPI_LONG,0,MPI_COMM_WORLD);h=1.0/(double)

88、n;sum=0.0;for(i=my_rank+1;i它指示主机当前处于它指示主机当前处于PVM控制台模式控制台模式.pvmd的启动方法的启动方法masterpvmd:必须手工启动必须手工启动slavepvmds:只能由只能由masterpvmd依次启动依次启动masterpvmd启动启动slavepvmd的方法的方法用用rsh,rexec(),或其它方法启动一个或其它方法启动一个slave1并行虚拟机的构造并行虚拟机的构造敷侯氟狱淮驻验榴六践稠掀拯老驰牲屁系接夕号炭缆曹弗百捅灸瞅拥牌舆第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)主要的主要的PVMPVM命

89、令命令1并行虚拟机的构造并行虚拟机的构造脾瞄侄啮倒殊刺子蚤氦趣鼓糖赐勺尿盲闻踊数弄峦泥很铱婚答惨为舱矗褐第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)启动文件启动文件:host_file并行虚拟机的硬件配置在主机表并行虚拟机的硬件配置在主机表(hosttable)文件中说明文件中说明.它常驻在虚拟机的每台主机上它常驻在虚拟机的每台主机上.主机表中有一项叫做主机描主机表中有一项叫做主机描述子述子(hostdescriptor),对应于虚拟机中的每台主机对应于虚拟机中的每台主机.主机描主机描述子中保存有主机配置信息述子中保存有主机配置信息,以及以及packetq

90、ueues和通信信息和通信信息缓冲缓冲.最初最初,主机表只有主机表只有masterhost一项一项.当一个新的当一个新的slave加加入到虚拟机后入到虚拟机后,masterhost的主机表被修改的主机表被修改,添加一个与新添加一个与新加入的加入的slave对应的新项对应的新项.然后然后,修改后的主机表的信息被播修改后的主机表的信息被播送到整个虚拟机送到整个虚拟机,包括新加入的包括新加入的slavehosts.这样这样,虚拟机中虚拟机中所有主机的主机表被同步所有主机的主机表被同步,并且保持一致并且保持一致,除非哪台机器不除非哪台机器不转了或网络失效转了或网络失效.1并行虚拟机的构造并行虚拟机的构

91、造挽阀腾溯椿男情窑滴瓤荤娃椎汝斧有洋蹄鲁展赊曙皆铡工儡砾弧苍澄昨窿第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)虚拟机的动态配置虚拟机的动态配置用户可以调用用户可以调用PVM库函数来动态配置虚拟机库函数来动态配置虚拟机.pvm_addhosts函数函数:向虚拟机中加入一至多台主机向虚拟机中加入一至多台主机pvm_delhosts函数函数:从虚拟机中删除一至多台主机从虚拟机中删除一至多台主机例子例子intinfo,nhost=2,infos2;char*host=“apple”,“”info=pvm_addhosts(hosts,nhost,infos);in

92、fo=pvm_delhosts(hosts,nhost,infos);1并行虚拟机的构造并行虚拟机的构造俐抒卑弃屏僳出际慧疟烁臭卿慎词恒惯亮臃枝绿波哼辕馆该靖及蚤纯能勋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)taskT(用户进程用户进程)pvmd2(系统进程系统进程)pvm_addhosts()Blockedfinisheddm_addhost()dm_htupd()dm_htcommit()dm_addhostack()pvmd1(系统进程系统进程)dm_addhost()dm_startack()dm_htupdack()pvmd3(系统进程系统进

93、程)slave_config()dm_htupd()dm_htcommit()hostH2(slave)hostH1(master)hostH3(newslave)图图动态加入一个主机动态加入一个主机H3昌可曼皮氏潭丁慎邢颂辊近竞莲窜棚甥昂何斯嘲腆脓遵党模漳野扇泊潘裕第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)PVM支持实现静态和动态的并行性支持实现静态和动态的并行性静态并行程序静态并行程序例子例子:foo为一个为一个SPMD程序程序,在控制台上执行命令在控制台上执行命令pvmspawncount4foo将创建一个将创建一个4个任务个任务(或进程或进程)的

94、并行应用的并行应用,运行在虚运行在虚拟机上拟机上.每个任务执行同一个代码每个任务执行同一个代码foo,如果如果foo不调用动不调用动态任务创建函数态任务创建函数pvm_spawn(),这个应用将有一个静态这个应用将有一个静态的的DOP(并发度并发度)为为4.2PVM中的进程管理中的进程管理煮却琢煽猩鲸吠粱谎主囱痈仇神劳洼灌辙玛蚤懦秆半庄诅寓摸陨卓疮挽粤第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)程序到主机的映射程序到主机的映射缺省缺省:由由PVM提供的应用算法将任务映射到主机上提供的应用算法将任务映射到主机上.每台每台主机上可映射多个任务主机上可映射多个任

95、务.用户自定义用户自定义:由用户为每个任务显式地定义一个特定的主由用户为每个任务显式地定义一个特定的主机或体系结构类型机或体系结构类型例子例子:在控制台上执行命令在控制台上执行命令:pvmspawn(apple)foo将在主机将在主机apple上启动一个任务执行代码上启动一个任务执行代码foopvmspawn(RS6K)foo将在任意的将在任意的RS/6000节点上使用节点上使用AIX操作系统启动一个任务操作系统启动一个任务执行代码执行代码foo2PVM中的进程管理中的进程管理体蜒抨邢瘸诀济航彝役沏陡蜗尸疏辩获泻痔瘸灼阑叁窜稠还栈晓谱违瘁佯第十四章分布存储系统并行编程第十四章分布存储系统并行编

96、程国家高性能计算中心(合肥)动态并行程序与进程管理动态并行程序与进程管理PVM支持开发支持开发MPMD并行程序和动态进程管理并行程序和动态进程管理.最重要最重要的函数是的函数是pvm_spawn().intnumt/实际被启动的任务数实际被启动的任务数=pvm_spawn(char*progm,/可执行文件名可执行文件名char*argv,/指向参数数组的指针指向参数数组的指针intflag,/选项选项char*where,/与与flag配合使用配合使用intntask,/可执行文件启动的拷贝数可执行文件启动的拷贝数int*tid/保存派生任务的保存派生任务的tid)2PVM中的进程管理中的进

97、程管理钝伤琵角燕森惑设兢瘪秒癣差棠讨臣侵叠具倡麦栏蛇酸政栓庶久馅夸畸嘶第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)2PVM中的进程管理中的进程管理锹佩诬库征抠恐壳耽龄誉邵歌歌幻研番屎迭站三靛氰椎过枪劈控迢宁鳞雷第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)2PVM中的进程管理中的进程管理臭栏垣函超傣姻笔吸沤巫壮艇贫蛮育圃赦惧棘躺镀椅碗舀柑超行猿娘钮坍第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)PVM支持动态分组支持动态分组,任何任务都可以在任意时候加入或离开一个组任何任务都可以在任意

98、时候加入或离开一个组.PVM的分组功能由一个叫做的分组功能由一个叫做groupserver的的daemon完成完成,当第一个组函当第一个组函数被调用时自动地启动这个数被调用时自动地启动这个daemon.PVM动态分组概念是很灵活的动态分组概念是很灵活的.可以有多个组可以有多个组,一个任务在任何时一个任务在任何时候可以属于不同的组候可以属于不同的组.一个任务可以在任何时候加入和离开一个组一个任务可以在任何时候加入和离开一个组,无需无需通知组内的其它成员通知组内的其它成员(不像不像MPI,一个任务在一组内总有一个唯一的编号一个任务在一组内总有一个唯一的编号).一个任务可以播送一个消息给一个组一个任

99、务可以播送一个消息给一个组,即使它不是这个组的成员即使它不是这个组的成员.动态分组带来程序行为的非确定性动态分组带来程序行为的非确定性.例如例如:一个播送操作可以有不同的结果一个播送操作可以有不同的结果, , 如果一个任务加入或离开一个组如果一个任务加入或离开一个组. . 任务可能会也可能不会得到这个广播的消息任务可能会也可能不会得到这个广播的消息. . 如果成员任务离开一个组如果成员任务离开一个组, , 路障同步操作可能会死锁路障同步操作可能会死锁. . 2PVM中的进程管理中的进程管理涵骄郝长嗜抢雷靖介灸糖邮彤席肝寝停典登判装朽磐晨押瞄丝里滚片迄驯第十四章分布存储系统并行编程第十四章分布存

100、储系统并行编程国家高性能计算中心(合肥)2PVM中的进程管理中的进程管理养扰淋带柜吭鹊院蔡贱阻制染路亚榨聚奄毅哟墩蓬阵福准搏审筏执汐扼愁第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)SGHL31302918170图图 PVM PVM通用的任务标识符通用的任务标识符TIDTID格式格式2PVM中的进程管理中的进程管理岳俘烤懒譬仙寒洛呈挂绢劳岭蛇贞被裸于朔舍糟庞宠雾庭颁芍陋凿咆随岭第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)task1pvmd1task2pvmd2UDPTCPTCPTCP图图通用的通用的PVM中所用的通信协议

101、中所用的通信协议PVM有三种类型的通信有三种类型的通信:pvmd间通信间通信pvmd与其任务间的通信与其任务间的通信以及两个任务间的通信以及两个任务间的通信3PVM中的通信中的通信毖终柜柴姓奢惑苦鳖泽慰甚轨塌甩隘荤弥铣启装渊疹啸襟起性变咬际丢剁第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)intbufid=pvm_initsend(intencoding)intinfo=pvm_pkint(int*p,intnitem,intstride)intinfo=pvm_send(inttid,inttag)intinfo=pvm_mcast(int*tids,in

102、tntasks,inttag)intbufid=pvm_recv(inttid,inttag)intbufid=pvm_nrecv(inttid,inttag)intbufid=pvm_trecv(inttid,inttag,structtimeval*tmout)intbufid=pvm_probe(inttid,inttag)intbufid=pvm_bufinfo(intbufid,int*bytes,int*tag,int*tid)intinfo=pvm_upkint(int*p,intnitem,intstride)3PVM中的通信中的通信PVMPVM通信函数实例通信函数实例仆居宽语

103、海幼乐智踪软茂芥剃体荧条氨奶潞恃揍请仕技傣乱铝古帝匈疮之第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)#definen16/*numberoftasks*/#include“pvm3.h”main(intargc,char*argv)intmytid,tidsn,me,i,N,rc,parent;doublemypi,h,sum=0.0,x;me=pvm_joingroup(“PI”);parent=pvm_parent();if(me=0)pvm_spawn(“pi”,(char*)0,0,“”,n-1,tids);printf(“Enterthenumb

104、erofregions:”);scanf(“%d”,&N);pvm_initsend(PvmDataRaw);pvm_pkint(&N,1,1);pvm_mcast(tids,n-1,5);elsepvm_recv(parent,5);pvm_upkint(&N,1,1);pvm_barrier(“PI”,n);/*optional*/h=1.0/(double)N;for(i=me+1;i=N;i+=n)x=h*(double)i-0.5);sum+=4.0/(1.0+x*x);mypi=h*sum;pvm_reduce(PvmSum,&mypi,1,PVM_DOUBLE,6,“PI”,0)

105、;if(me=0)printf(“piisapproximately%.16fn”,mypi);pvm_lvgroup(“PI”);pvm_exit();4例子例子:计算计算的的PVM程序程序这个这个SPMD程序划分间隔程序划分间隔0,1进入进入N个区域个区域,并启用并启用n个任务个任务.每每个任务负责由个任务负责由N/n区域计算一个部区域计算一个部分和分和mypi.然后这然后这n个部分和由归个部分和由归约约(reduction)操作聚积成一个总和操作聚积成一个总和.箭品毙珍知嘘朴埠们赛什吝原拣搂鲤紊冕应官皱泼磐匈圃粹劈矛砌槛藩乎第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性

106、能计算中心(合肥)假定源码包含在文件假定源码包含在文件pi.c中中.可执行文件可执行文件pi用以下命令得到用以下命令得到:ccI/pvm3/includepi.clibgpvm3.alibpvm3.aopi用户调用第一个任务用户调用第一个任务,它派生出其它它派生出其它n-1个任务个任务.每个任务每个任务首先用以下语句首先用以下语句:me=pvm_joingroup(“PI”);加入一个组加入一个组PI,变量变量me将包含组内任务的编号将包含组内任务的编号(实例号实例号).初初始任务的编号为始任务的编号为0.下一条语句下一条语句parent=pvm_parent();找出父任务的找出父任务的ID

107、.初始任务没有父亲初始任务没有父亲,这个函数调用返回这个函数调用返回0.对其它任务对其它任务,这个函数调用返回初始任务的这个函数调用返回初始任务的ID.4例子例子:计算计算的的PVM程序程序厅爱材咳盯傍搔邓间祸帚茧置迭屠礼逻试锣疟躲判衷孟向人新政实封谷暑第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)初始任务执行初始任务执行pvm_spawn(“pi”,(char*)0,0,“”,n-1,tids);派生派生n-1个子任务个子任务,执行文件执行文件“pi”中的代码和他们的任中的代码和他们的任务务ID在数组在数组tids中返回中返回.其它三个参数为其它三个参数为

108、null(0),这是许多这是许多PVM程序的典型情况程序的典型情况.初始任务执行下面的代码提示用户键入变量初始任务执行下面的代码提示用户键入变量N中的区域数中的区域数:printf(“Enterthenumberofregions:”);scanf(“%d”,&N);4例子例子:计算计算Pi的的PVM程序程序钳蔓孔踪番透鹅哑逸敷望搏瓦臃民甄便造秤闯饮会柔疡筷匈鸽驰疵逛绥悼第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)然后然后,它执行下列代码将这个值播送给所有子任务它执行下列代码将这个值播送给所有子任务:pvm_initsend(PvmDataRaw);pvm

109、_pkint(&N,1,1);pvm_mcast(tids,n-1,5);这里这里,5是一个任意的消息标签是一个任意的消息标签.同时同时,每个子任务将执行下列代码匹配这个播送每个子任务将执行下列代码匹配这个播送:pvm_recv(parent,5);/*5是与是与pvm_mcast中的标签相匹配的标签中的标签相匹配的标签*/pvm_upkint(&N,1,1);然后所有的任务执行一个路障同步然后所有的任务执行一个路障同步:pvm_barrier(“PI”,n);/*在组在组PI中的中的n个任务应在此同步个任务应在此同步*/4例子例子:计算计算Pi的的PVM程序程序服杆樱祭拧拌嗣氓绚毅崩姆然啼寄

110、矛喧嫩履致挛驳侠真也愚邮火慢掩节卑第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)接下来的几行只是正常的计算接下来的几行只是正常的计算:h=1.0/(double)N;for(i=me+1;ipvmdd7host_file&$pvmpvmspan4pipvmhalt4例子例子:计算计算Pi的的PVM程序程序脾魄漳锅魁机景钝汕蔓纫疽甫寞抓邵傣侥薄誉寨景酸卯驹憎扦膝嗓隔莹樟第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)提纲14.1 基于消息传递的编程14.2 MPI并行编程14.3 PVM并行编程14.4 基于数据并行的并行编程

111、14.5 HPF并行编程绵四陇白晌悟蛙层乃蒋祖量编聚郑邪隙琳嫌屋申盈港坯樟腹抄毅孤诫逝融第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)数据并行模型的特点数据并行模型的特点单线程单线程在密集的数据结构上的并行操作在密集的数据结构上的并行操作全局命名空间全局命名空间隐式的同步和通信隐式的同步和通信隐式的计算和数据分布隐式的计算和数据分布具有很好的可移植性具有很好的可移植性.包括包括SIMD,MIMD,共享和分布存储机器共享和分布存储机器数据并行模型的目的是要在分布存储的机器上实现在全局数据并行模型的目的是要在分布存储的机器上实现在全局名空间进行并行程序设计名空间

112、进行并行程序设计,以屏蔽显式的数据分布和通信问题以屏蔽显式的数据分布和通信问题,是一种细粒度的并行是一种细粒度的并行.与消息传递模型相比与消息传递模型相比,数据并行程序设计能在一定程度上减数据并行程序设计能在一定程度上减轻程序员的负担轻程序员的负担,但是完全依赖于程序员能否确定一个好的数据但是完全依赖于程序员能否确定一个好的数据分布分布.数据并行程序设计数据并行程序设计蒋拱绢视倍皿减察梁歇寿清写阔晚门琉向炽趁标氓翱讳诵畴五渔蒲景涝械第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)数据并行语言的发展数据并行语言的发展在在SIMD机器机器ILLIACIV开发的语言

113、开发的语言IVTRAN,是最早的允是最早的允许用户控制数据布局的语言许用户控制数据布局的语言KaliFortranD/ViennaFortranFortran90/Fortran95ThinkingMachines公司的公司的C*/CMFortran/*LispHPF/HPF+/F-/HPC+/HPJava数据并行程序设计数据并行程序设计桐镣创体甘掺狄涛葬恋外茹芝蛔仅障指槛宇韧下强漱趣象烘簇氓缅莽援考第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)提纲14.1 基于消息传递的编程14.2 MPI并行编程14.3 PVM并行编程14.4 基于数据并行的并行编程1

114、4.5 HPF并行编程寿惨沸喳蒜诺约瓷凳僳姓尺剧绞更锥逗蜜啤腿练桥容续辊啥塔溪钠妒吠毋第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1高性能高性能Fortran(HPF)简介简介2HPF的数据并行机制的数据并行机制3例子例子:高斯消去法的高斯消去法的HPF程序程序HPFHPF并行编程并行编程睫咽须擒盘八冻蜒泼鲜典暴到烃淆打浮眩窑秸趾凯翱宜封佳幌港如夹沧言第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)1高性能高性能Fortran(HPF)简介简介发展历史发展历史1991年年,DEC的的D.Lovman和和Rice大学的大学的

115、K.Kennedy在在Supercomputing91大会上提出了他们的高性能大会上提出了他们的高性能Fortran版本版本,以统一在分布存储机器上的编程方法以统一在分布存储机器上的编程方法1992年年1月月,在在Rice大学召开了第一次大学召开了第一次HPF会议会议,一致通过一致通过组织组织HPF论坛论坛1992年年3月月,该论坛正式成立该论坛正式成立1993年年5月月,发布了发布了HPF1.0版版基于基于Fortran901994年年11月发布了月发布了HPF1.1版版1997年年1月月,论坛发布了论坛发布了HPF2.0基于基于Fortran95谜泽鸽迁雏僚郴饼粮咸纱磕喂怜加戚纸勋虫小槐石

116、丢植搜蛇决杉芬贷绞卧第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)对对HPF的批评主要有三个方面的批评主要有三个方面:认为认为HPF是一个太高层的语言是一个太高层的语言,不如不如MPI风格的语言适用风格的语言适用;认为认为HPF是一个太低层的语言是一个太低层的语言,通过改进语言编译技术和通过改进语言编译技术和体系结构完全可以避开体系结构完全可以避开HPF风格的语言所要求的编译制导风格的语言所要求的编译制导;认为认为HPF尽管抽象层次适当尽管抽象层次适当,但还要作一些扩充才能满足但还要作一些扩充才能满足在某些将来的体系结构上处理某些应用的需要在某些将来的体系结

117、构上处理某些应用的需要.1高性能高性能Fortran(HPF)简介简介离离瞒鱼灵吠贫膏脊蚂贼沪视赵神署阔兔睡烷萨关捅往忌狮做裳穆钓卓沧第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)HPF主要的设计目标如下主要的设计目标如下:(1)支持数据并行程序设计支持数据并行程序设计;(2)最大限度地发挥非均匀存储访问的最大限度地发挥非均匀存储访问的MIMD和和SIMD计算计算机的性能机的性能;(3)能够调整代码适应各种体系结构的计算机能够调整代码适应各种体系结构的计算机.HPF2.0语言的组成包括三个部分语言的组成包括三个部分:(1)语言的基本部分语言的基本部分:包括任

118、何包括任何HPF编译器必须支持的特性编译器必须支持的特性;(2)已经核准的扩展部分已经核准的扩展部分:包括满足某些特殊需要的高级结包括满足某些特殊需要的高级结构构,早期的编译器可能不支持这部分早期的编译器可能不支持这部分;(3)已被承认的外部接口已被承认的外部接口:是是HPF论坛批准的一组接口论坛批准的一组接口,但是但是由他人设计并为由他人设计并为HPF用户提供具体的服务内容用户提供具体的服务内容.1高性能高性能Fortran(HPF)简介简介晨彩民桩泥俘殊纪玄钩坟姨露铱邦匣肄们醇滤列平线翼边逮丑垦仑止综碘第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)HPF

119、2.0的一些基本特性如下的一些基本特性如下:(1)数据并行说明数据并行说明(Dataparalleldirectives):达到第一个目标达到第一个目标INDEPENDENT:声明一个循环没有依赖:声明一个循环没有依赖,可以并行执行可以并行执行REDUCTION:标识被不同迭代使用结合的和可交换的运算:标识被不同迭代使用结合的和可交换的运算修改的变量修改的变量(2)数据映射说明数据映射说明(Datamappingdirectives):达到第二个目标达到第二个目标ALIGN:数据对准:数据对准DISTRIBUTE:数据分布(映射):数据分布(映射)声明如何在处理器间分配数据声明如何在处理器间分

120、配数据,使得通信开销最小使得通信开销最小,负载平衡负载平衡.(3)新的内部函数和库函数新的内部函数和库函数(Newintrinsicandlibraryfunctions):用于实现第三个目标用于实现第三个目标,允许用户利用特定机器的低层特性允许用户利用特定机器的低层特性.归约归约(reduction)函数组合分散函数组合分散(Combining-Scatter)函数函数,前缀前缀(Prefix)/后缀后缀(Suffix)函数函数分类分类(Sorting)函数函数/位操作位操作(Bit-Manipulation)函数函数(4)外部过程外部过程(Extrinsicprocedures):用于匹配

121、其它的编程方法,用于匹配其它的编程方法,支持混合语言编程支持混合语言编程吁叠扶拘烹吴敝隧茎焕屉俘糊忠匠码抉荔膨痊假陆粹悯辕御眷转坍偷诸妨第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)3.1FORALL结构结构(FORALLconstruct)例例1简单的简单的FORALL语句语句FORALL(K=1,M1)X(K+1)=X(K)注释注释:语句执行后语句执行后,X(I1)的值送入的值送入X(I)中中.FORALL(I=1:N,J=1,N)X(I,J)=Y(J,I)注释注释:语句执行后语句执行后,Y的转置矩阵被送入的转置矩阵被送入X.2HPF的数据并行机制的数据

122、并行机制禁桨鹅幌涟豹襟抑忙缺灰猎医杜灯断连织揪瞳忧某象巷化条浮表抨火婶兢第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例2带限制的带限制的FORALL语句语句FORALL(i=2:5,X(i)0)X(i)=X(i1)+X(i+1)注释注释:i是索引变量是索引变量,i=2:5称为称为for-三元组三元组,等价于等价于i=2:5:1,表示表示i的变化范围下界是的变化范围下界是2,上界是上界是5,缺省步长为缺省步长为1.即即i的有效值取的有效值取2,3,4,5.假设在上述假设在上述FORALL语句中语句中,初始初始X=1,1,2,2,3,3,在在i的有效值范围内

123、的有效值范围内,满足满足X(i)0的索引的索引i的活动集合的活动集合为为3,5.求出这个活动索引值集合后求出这个活动索引值集合后,所有赋值表达式同时所有赋值表达式同时计算计算:X(3)=X(3-1)+X(3+1)=3X(5)0)Z(i,j)=1/Y(i,j)注释注释:该语句等价于该语句等价于Fortran90语句语句where(Y(1:2,1:3)0)Z(1:2,1:3)=1/Y(1:2,1:3)则联合索引的有效值取集合则联合索引的有效值取集合(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),联合索引的活动值取上联合索引的活动值取上述集合中使述集合中使Y(i,j)0的子集

124、的子集.2HPF的数据并行机制的数据并行机制奔颜币销酪碑俗迢揪其钳高乘柞涟媒景嗜级合穆愿降侧哦块呈阳潮沦棚母第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)有时有时,用户希望在一个用户希望在一个FORALL语句中包含几个赋值语句中包含几个赋值,这可这可用用FORALL结构来实现结构来实现.FORALL结构是对结构是对FORALL语句的进语句的进一步扩充一步扩充,即在即在FORALL和和ENDFORALL之间之间,可以写多条语句可以写多条语句.但限制但限制FORALL结构中只能使用赋值语句、结构中只能使用赋值语句、FORALL语句、语句、FORALL结构、结构、

125、WHERE语句及语句及WHILE结构结构.例例5FORALL(I=2:9)A(I)=A(I1)+A(I+1)B(I)=A(I)ENDFORALL注释注释:首先,首先,对从对从2到到9的各的各I,求值求值A(I1)+A(I+1),然后然后,将其结将其结果送入果送入A(2)到到A(9)中中,再将求得的再将求得的A(2)到到A(9)的值送入的值送入B(2)到到B(9)中中.2HPF的数据并行机制的数据并行机制卞涡约黔拨傅蝴俭烤来武给介疆无粥艳港琳畏晒蹋冠涩邑傅谰镁娘樊质厩第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例6FORALL(i=1:n)A(i)=sin

126、(B(i);C(i)=sqrt(A(i)*A(i)D(i)=B(i)+2ENDFORALL2HPF的数据并行机制的数据并行机制秤抠豌令票蒲安啼荡槐羚河孵蹿口翰咏这梗刊杜史望焕邓拌冻至火琉穷龙第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)3.2数据映射数据映射(Datamapping)数据映射数据映射:指的是将数据分布到处理器上指的是将数据分布到处理器上.要在分布存储系统要在分布存储系统上实现并行处理上实现并行处理,首先要对数据首先要对数据(主要是数组主要是数组)进行划分进行划分,然后分然后分配给各个处理机配给各个处理机,再在各个处理器上进行计算再在各个处理器

127、上进行计算.数据映射要达到以下目的数据映射要达到以下目的:(1)使处理器间的通信开销最小使处理器间的通信开销最小;(2)负载在可用的处理器间均匀分布负载在可用的处理器间均匀分布.HPF编译器可以利用编译器可以利用owner-compute规则分布负载规则分布负载:在数在数据所在的处理器上执行与该数据有关的计算据所在的处理器上执行与该数据有关的计算.因此数据映射直因此数据映射直接决定负载分布接决定负载分布.HPF提供了许多说明语句用于指示编译器如提供了许多说明语句用于指示编译器如何最佳地分布数据到计算节点上去何最佳地分布数据到计算节点上去.2HPF的数据并行机制的数据并行机制阅射耿毛协饱尝洗乳明

128、刃扁截琅扔瓶这铰阶倡拄闸饿构钡诡揭九进哭仟幕第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)一些重要的说明语句的例子一些重要的说明语句的例子(1)伪指令伪指令PROCESSORS:用于描述虚拟的处理机结构用于描述虚拟的处理机结构例例7!HPF$PROCESSORP4(4)注释注释:描述由描述由4个处理机组成的虚结构个处理机组成的虚结构!HPF$PROCESSORP22(2,2)注释注释:描述两行两列共描述两行两列共4个处理器组成的二维虚结构个处理器组成的二维虚结构2HPF的数据并行机制的数据并行机制氢雌适遥嗣帚脾湃蒋脚诲灼晋扒啡尿窟镣叙琴降谍戚牙傈际苇醉题插了

129、压第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)(2)伪指令伪指令ALIGN:用于描述数据对准用于描述数据对准例例8同维数组间的对准同维数组间的对准!HPF$ALIGNA(I)WITHB(I)注释注释:表示把表示把A的第的第I个元素与个元素与B的第的第I个元素分配到同一个个元素分配到同一个处理器上处理器上.!HPF$ALIGNA(I)WITHB(I+1)注释注释:表示把表示把A的第的第I个元素与个元素与B的第的第I+1个元素分配到同一个元素分配到同一个处理器上个处理器上.!HPF$ALIGNA(I,J)WITHB(J,I)注释注释:表示把表示把A的第的第(I

130、,J)个元素与个元素与B的第的第(J,I)个元素分配到个元素分配到同一个处理器上同一个处理器上.2HPF的数据并行机制的数据并行机制雪锦铅认奇报恰意脆暗揣锤酥为向遏矿滴槛土卷遥初汇衙辱鳞蛾吱耿夹蹄第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例9不同维数组间的对准不同维数组间的对准!HPF$ALIGNA(I,*)WITHB(I)注释注释:表示把表示把A的第的第I行的所有元素与行的所有元素与B的第的第I个元素分配到同个元素分配到同一个处理器上一个处理器上.!HPF$ALIGNA(I)WITHB(I,*)注释注释:表示把表示把A的第的第I个元素重复分配到个元素

131、重复分配到B的第的第I行各元素所在行各元素所在的处理器上的处理器上.2HPF的数据并行机制的数据并行机制飘啼颐砍者壹珐蛾互喝呵凌搪亩隋别窗满氛淹智殃悟求账谈辜涟塌孜野贸第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)(3)伪指令伪指令DISTRIBUTE:用于描述数据映射用于描述数据映射(分布分布)有分块有分块(BLOCK(n)和循环和循环(CYCLIC(n)两种分布方式两种分布方式.例例10以分块方式进行数据分布以分块方式进行数据分布!HPF$DISTRIBUTEA(BLOCK)ONTOP4注释注释:表示将表示将A分成每块有分成每块有25个元素组成的个元素组

132、成的4个块个块,分给分给4个个处理器处理器.!HPF$DISTRIBUTEA(BLOCK(30)ONTOP4注释注释:表示将表示将A分成每块有分成每块有30、30、30、10个元素组成的个元素组成的4个块个块,分给分给4个处理器个处理器.2HPF的数据并行机制的数据并行机制散罚纱清戈榴凄梆诬桓半琼碳悍瓶软攒垫嗽瑰引碧沿牵织投腋凤烂剂樟遏第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)!HPF$DISTRIBUTEB(BLOCK,BLOCK)ONTOP22注释注释:表示数组表示数组B在行列两个方向被分成在行列两个方向被分成4个块个块,分给分给4个处个处理器理器.

133、!HPF$DISTRIBUTEB(*,BLOCK)ONTOP4注释注释:表示数组表示数组B在列方向分成在列方向分成4个块个块,行方向不分布行方向不分布2HPF的数据并行机制的数据并行机制遁狰墓抖恐浚铜赚朔磺桥者戮伎刽涎携怀兽尼紫鸭爷郴坎抒茶缄嘶么诊淄第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例11以循环方式进行数据分配以循环方式进行数据分配!HPF$DISTRIBUTEA(CYCLIC)ONTOP4注释注释:表示从表示从A(1)开始开始,把各元素循环分配给从第把各元素循环分配给从第1到第到第n(这里这里n=4)个处理器个处理器,如如,第第1个处理器分到

134、了个处理器分到了A(1),A(5),A(9)等等.!HPF$DISTRIBUTEA(CYCLIC(2)ONTOP4注释注释:表示把数组元素从前往后表示把数组元素从前往后,每两个分为一组每两个分为一组,循环分给从循环分给从第第1至第至第n(=4)个处理器个处理器.如如,处理机处理机1分到了分到了A(1),A(2),A(9),A(10),处理器处理器2分到了分到了A(3),A(4),A(11),A(12)等等等等.2HPF的数据并行机制的数据并行机制象肛验陇唾捆泡薪袱咋恭娄已哪芳童帕谬障纶疼咨椒攻帽遵峪哄蜡涂邯沂第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)(4

135、)一个数据映射的一个数据映射的HPF程序段程序段例例12考虑如下代码段考虑如下代码段:integerA(100),B(100),C(101),i!HPF$ALIGNA(i)WITHB(i-1)!HPF$PROCESSORN(4)!HPF$DISTRIBUTEA(BLOCK)ONTON!HPF$DISTRIBUTEC(CYCLIC)ONTONFORALL(i=2:100)A(i)=A(i)+B(i1)C(i)=C(i1)+C(i)+C(i+1)ENDFORALL2HPF的数据并行机制的数据并行机制压懦淀惧强节楚腾核印拣嘿抽齐维劫斡权胎赃泄甲禽缮连差格怠左茨赫痔第十四章分布存储系统并行编程第十四章

136、分布存储系统并行编程国家高性能计算中心(合肥)LogicalMappingALIGNDISTRIBUTEA(1:25)B(1:24)C(1:101:4)A(26:50)B(25:49)C(2:101:4)A(51:75)B(50:74)C(3:101:4)A(76:100)B(75:99)C(4:101:4)N1N2N3N4N1N2N3N4N1,N2N3,N4N1,N2N3,N4HighPerformanceSwitch.AParagonMeshAUniprocessorAnIBMSP2PhysicalMappingC(1)C(2)C(3).C(101)B(1)B(2).B(99)B(100)

137、A(1)A(2)A(3).A(100)A(1)A(2)A(3).A(100)B(1)B(2).B(99)B(100)C(1)C(2)C(3).C(101)足艺枯缘欧伐裴吧淡据惭丽磊酬找拦获秋熄彪割畸栓镁脏宫房客晋甸片虎第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)例例13!HPF$PROCESSORN(4,5)注释注释:定义定义20个节点组成的个节点组成的45网格网格.!HPF$PROCESSORN(4,5,6)注释注释:定义定义120个节点组成的个节点组成的456网格网格.2HPF的数据并行机制的数据并行机制痒芜巢丧匙栏股箍甸腋患颤矛灭蘸供殴佃巾稿背臂原滚

138、填申氦驮议伏穗错第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)parametern=32realA(n,n+1),x(n)integeri,pivot_location(1)!HPF$PROCESSORNodes(4)!HPF$ALIGNx(i)WITHA(i,j)!HPF$DISTRIBUTEA(BLOCK,*)ONTONodesdoi=1,n-1!pivoting(选主元选主元)pivot_location=MAXLOC(ABS(A(i:n,i)swap(A(i,i:n+1),A(i-1+pivot_location(1),i:n+1)!triangul

139、arization(三角化三角化)A(i,i:n+1)=A(i,i:n+1)/A(i,i)FORALL(j=i+1:n,k=i+1:n+1)A(j,k)=A(j,k)-A(j,i)*A(i,k)enddo3高斯消去法的高斯消去法的HPF程序程序娇帖煌捉飘俯核怖迂但伤研咆哉煞备车鹤梁确芽公休磺损椽漱孵贸零剖司第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)!backsubstitution(反向替换反向替换)doi=n,1,-1x(i)=A(i,n+1)A(1:i-1,n+1)=A(1:i-1,n+1)-A(1:i-1,i)*x(i)enddo3高斯消去法的高斯

140、消去法的HPF程序程序贷挨断再拄唤稿唆枷谊跌签蹦撤仰逝慎榜煞钩障店挑髓脑卡泅侗况半类桅第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)DISTRIBUTED命令指出命令指出A的第一维应是成块分布的第一维应是成块分布.A的第二的第二维中的维中的*号说明第二维已被折叠号说明第二维已被折叠,意味着部分数组意味着部分数组A(I,1:n)被被映射到同一结点映射到同一结点.假设有四个虚拟结点假设有四个虚拟结点N1,N2,N3,N4,且且N可为可为4整除整除.那么那么,数数据分布便为如下据分布便为如下:N1:A(1:n/4,1:n),b(1:n/4),Temp(1:n/4)

141、,X(1:n)N2:A(n/4+1:2*n/4,1:n),b(n/4+1:2*n/4),Temp(n/4+1:2*n/4),X(1:n)N3:A(2*n/4+1:3*n/4,1:n),b(2*n/4+1:n),Temp(2*n/4:3*n/4)N4:A(3*n/4+1:n,1:n),b(3*n/4+1:n),Temp(3*n/4+1:n),X(1:n)3高斯消去法的高斯消去法的HPF程序程序铬始填功哼演想慨炭袒馁袖皖洛故虾艇祈改扁祭绪骋控膨畅治炮锄契拘杨第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)在四个结点中的数据分布在四个结点中的数据分布结点结点1A(1:8;1:33),X(1:8)结点结点2A(9:16,1:33), X(9:16)结点结点3A(17:24,1:33),X(17:24)结点结点4A(25:32,1:33),X(25:32)3高斯消去法的高斯消去法的HPF程序程序抑藻怪站唬植硝傻馏仿姐几您凸循届宁毙容钧臻续拿巡祭峦纪掳哼负堰卯第十四章分布存储系统并行编程第十四章分布存储系统并行编程国家高性能计算中心(合肥)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号