- 1、本文档共126页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十四章 分布存储系统并行编程 分布存储系统并行编程 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程 分布存储系统并行编程 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程 MPI并行编程 提纲 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程 提纲 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程 提纲 14.1 基于消息传递的编程 14.2 MPI并行编程 14.3 PVM并行编程 14.4 基于数据并行的并行编程 14.5 HPF并行编程 接下来的几行只是正常的计算: 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; 4 例子: 计算Pi的PVM程序 接下来做归约操作: pvm_reduce(PvmSum,mypi,1,PVM_DOUBLE,6, “PI”,0); 这是一个组PI中所有的任务的求和归约. 每个任务从本地mypi贡献一个类型为PVM_DOUBLE数据项. 最终的结果存放在初始任务(编号为0)的mypi中. 数6也是一个任意的消息标签. 一般地, 一个PVM归约具有以下函数原型 pvm_reduce(void(*func)(),void *buffer, int nitem, int datatype, int tag, char *group, int root); 打印出这个结果后, 程序调用以下函数清理环境 pvm_lvgroup(“PI”) and pvm_exit() . 4 例子: 计算Pi的PVM程序 编译: pvmcc -o pi pi.c 运行: $pvmd –d7 host_file $pvm pvmspan –4 pi pvmhalt 4 例子: 计算Pi的PVM程序 6 MPI扩展 MPI-2对MPI-1的扩展 动态进程 单边通信 非阻塞群集通信模式和通信子间群集通信模式. 对可扩展的I/O的支持, 叫做MPI-IO. 在MPI-1中, I/O问题全部忽略. MPI-1只定义对Fortran77和C语言的绑定. MPI-2将语言绑定扩展到Fortran90和C++. 对实时处理的支持. 扩展了MPI-1的外部接口, 以便使环境工具的开发者更易于访问MPI对象. 这将有助于开发剖析(profiling)、 监视(monitoring)和调试(debugging)工具. 动态进程 MPI-2决定支持动态进程, 这带来了以下好处: MPI-1不定义如何创建进程和如何建立通信. 因此, MPI-1需要支撑平台提供这种能力, 像SP2中的POE和工作站网络中的rsh. MPI-2中的动态进程机制以可移植的方式(平台独立)提供了这种能力 动态进程有利于将PVM程序移植到MPI上. 并且还可能支持一些重要的应用类型, 如, Client/Server和Process farm. 动态进程允许更有效地使用资源和负载平衡. 例如, 所用节点数可以按需要减少和增加 支持容错. 当一个结点失效, 运行在其上的进程能在另一个结点上创建一个新进程完成其工作. 6 MPI扩展 int MPI_Spawn ( char* command_line, int minprocs, int maxprocs, char* info, int root, MPI_Comm comm, MPI_Comm* intercomm int* array_of_errcodes ) /* 可执行程序和参数 */ /* 最少要派生的进程数 */ /* 最多要派生的进程数 */ /* 在何处何时启动该进程 */ /* 根进程的编号 */ /* 根进程的通信子 */ /* comm与新派生的进程组间的互连通信子*/ /* 每个派生进程一个出错代码 */ 这个函数试图派生maxprocs个子进程, 每个子进程执行相同代码, 这个代码在command_line中定义. 如果MPI不能派生maxprocs个进程, 它可以按minprocs指定的数目派生进程. 如果它连minprocs个进程都派生不了, MPI_Spawn就返回一个出错代码. info 必须是一个空串, 允许运行时系统决定何
文档评论(0)