- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章MPI编程3
并行程序设计-23 * * 内容提要 一 并行编程硬件基础 (3学时) 二 并行编程软件基础 (3学时) 三 多线程编程基础 (2学时) 四 Linux多线程编程 (2学时) 五 Windows多线程编程 (3学时) 六 OpenMP编程 (7学时) 七 MPI编程 (4学时) 八 其他编程语言和方法 (2学时) 九 并行程序设计的应用实例 (2学时) MPI简介 MPICH的安装和配置 MPI编程基础 4. MPI“点到点(Point-to-Point)”通信 5. MPI群体通信 (本节课内容) 6. MPI的组与通信子 7. MPI程序分析与优化 七 MPI编程 * * * * 5 MPI群体通信(集合通信 or 组通信) “点对点”通信满足个体之间任何的消息交换要求,群体之间采用更简洁的手段,将可以大大简化并行程序开发的工作量。 群体通信(collective communication) :涉及通信子中全部进程的通信模式 一个组中所有成员都要参加,但所扮演的角色可能不一样 注: 在点对点通信中,通信参与双方调用不同的函数 目的 程序代码简洁 便于MPI runtime根据数据交换的模式提高效率 使用MPI_Send/MPI_Recv交换数据 if(myRank==0) { n=BodyNum; t=TimeSteps; for(i=1;iproc; i++){ MPI_Send(n, 1, MPI_INT, i, 10, MPI_COMM_WORLD); MPI_Send(t, 1, MPI_INT, i, 20, MPI_COMM_WORLD); } } else { MPI_Recv(n, 1, MPI_INT, 0, 10, MPI_COMM_WORLD, status); MPI_Recv(t, 1, MPI_INT, 0, 20, MPI_COMM_WORLD, status); } “点对点”通信例子 * * 使用群体通信交换数据 if(myRank==0) { n=BodyNum; t=TimeSteps; } MPI_Bcast(n, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(t, 1, MPI_INT, 0, MPI_COMM_WORLD); 对应的群体通信例子 * * * * 三类群体通信(实现的三种功能) 数据交换 广播 散播 收集 全交换 全局计算 规约 进程强制进度同步 障碍同步 * * Broadcast 广播 (1→N) 把一个进程中的某个数据广播给同一通信子中其余进程 A0 A0 A0 A0 A0 A0 A0 data processes * * MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm) root:以该进程为根,向组内所有进程发送消息,属于comm的一个进程 在root进程上:把(buffer, count, datatype)指定的数据(标量或向量),作为一条message,分别向通信子对象comm中的每个进程(包括root自己)发送 在comm中的每个进程(包括root自己)上:把从root所接收message中的数据存储在(buffer, count)指定的缓冲区中 datatype是缓冲区元素的类型,可以是MPI基本类型,也可以是派生数据类型 comm中的每个进程都需要执行MPI_Bcast,而且它们的参数root和comm必须完全一致 * * 群体通信 MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm) 等价MPI_Send/MPI_Recv If(myRank==root) for(i=0; iprocs; i++) { if(i==root) continue; MPI_Send(buffer, count, datatype, i, tag, comm) } else MPI_Recv(buffer, count, datatype, root, tag, comm, status); * * Scatter 散播(1→N) 从一个通信子的根进程分别向组内进程发送不同数据 这一组进程用一个通信子表示 A0 A1 A2 A3 A4 A5 data
您可能关注的文档
最近下载
- 2025年部编版四年级下册语文第三单元综合检测试卷及答案A卷.pptx VIP
- 电伴热带说明书.docx
- 统编版(2024)小学道德与法治一年级下册《我们爱分享》教学设计.docx VIP
- 北师大版七年级下 乘法公式在解题中的应用.doc VIP
- PEP人教版英语五年级下册 Unit 2 My favourite season 大单元作业设计 (2).docx
- 江苏省各地市2023年中考化学试题【7套】(附真题答案).docx VIP
- 《Zemax光学设计软》课件.ppt VIP
- 氢氧化钠安全 技术说明书.doc VIP
- 2025年部编版四年级下册语文第六单元综合检测试卷及答案A卷.pptx VIP
- 高等教育学考试试题(附答案).pdf VIP
文档评论(0)