高性能计算之并行编程技术 一MPI并行程序设计 都志辉 编著 李三立 审阅 陈渝刘鹏校对
I 高性能计算之并行编程技术 —— MPI并行程序设计 都志辉 编著 李三立 审阅 陈渝 刘鹏 校对
内容提要 本书介绍目前最常见的并行程序MPI并行程序的设计方法,它适合高校三四年级本科 生、非计算机专业研究生作为教材和教学自学参考书,也适合于广大的并行计算(高性能计 算)用户作为自学参考书使用,对于有FORTRAN和C编程经验的人员,都可以阅读并掌握 本书的内容。 首先介绍了并行程序设计的基础,提供给读者进行并行程序设计所需要的基本知识;然 后介绍了MPI的基本功能 从简单的例子入手,告诉读者MP程序设计的基本过程和框架 这一部分是具有C或FORTRAN串行程序设计经验的人员很容易理解和接受的:接下来介绍 MPI程序设计的高级特征,是已经掌握了MPI基本程序设计的人员进一步编写简洁、高效的 MP程序,使用各种高级和复杂的MPI功能所需要的;最后一部分介绍了MPI的最新发展和 扩充P2,主要包括三个部分,动态讲程管理、远程存储访问和并行文件读写。 本书包括了MP1的全部调用和MP2的关键扩充部分的调用,并附以大量的图表和示 例性程序,对程序的关键部分给出了讲解或注释。读者若能将例子和对MI调用的讲解结合 起米学习,会取得更好的效果。 本书的目的,不仅是教给读者如何去编写从简单到复杂的MPI并行程序,更重要的是, 希望在学习本书之后,在读者以后解决问题的过程中,能够树立并行求解的概念,使并行方 法真正成为广大应用人员和程序开发员手中的重要工具
II 内容提要 本书介绍目前最常见的并行程序—MPI并行程序的设计方法 它适合高校三四年级本科 生 非计算机专业研究生作为教材和教学自学参考书 也适合于广大的并行计算 高性能计 算 用户作为自学参考书使用 对于有FORTRAN和C编程经验的人员 都可以阅读并掌握 本书的内容 首先介绍了并行程序设计的基础 提供给读者进行并行程序设计所需要的基本知识 然 后介绍了MPI的基本功能 从简单的例子入手 告诉读者MPI程序设计的基本过程和框架 这一部分是具有C或/FORTRAN串行程序设计经验的人员很容易理解和接受的 接下来介绍 MPI程序设计的高级特征 是已经掌握了MPI基本程序设计的人员进一步编写简洁 高效的 MPI程序 使用各种高级和复杂的MPI功能所需要的 最后一部分介绍了MPI的最新发展和 扩充MPI-2 主要包括三个部分 动态进程管理 远程存储访问和并行文件读写 本书包括了MPI-1的全部调用和MPI-2的关键扩充部分的调用 并附以大量的图表和示 例性程序 对程序的关键部分给出了讲解或注释 读者若能将例子和对MPI调用的讲解结合 起来学习 会取得更好的效果 本书的目的 不仅是教给读者如何去编写从简单到复杂的MPI并行程序 更重要的是 希望在学习本书之后 在读者以后解决问题的过程中 能够树立并行求解的概念 使并行方 法真正成为广大应用人员和程序开发员手中的重要工具
目录 序 前言 XI 程序列表 .XII 图列表 XIV 表格列表 .XVI 第一部分并行程序设计基础 第1章并行计算机 1.1并行计算机的分类 .2 1.11指令与数据 2 1.12存储方式 1.2物理问题在并行机上的求解 1.3小结 第2章并行编程模型与并行语言. .6 2.1并行编程模型. .6 2.2并行语言 23小结 第3章并行算法 3.1并行算法分类 3.2并行算法的设计。 9 3.3小结 11 第二部分基本的MPI并行程序设计 12 第4章MPI简介. 13 41什么是P 13 42MPI的目的 13 4.3PI的产生 44P1的语言绑定 4.5目前主要的PI实现 15 46小结 第5章第一个MPI程序。 51MPI实现的“Hello World! 16 5.1.I用FORTRAN77+MPI实现 ,16 5.12用C+MPI实现 18 5.2MPI程序的一些惯例. 1 5.3小结 第6章六个接口构成的MPI子集 2 61子集介绍 61.1MPI调用的参数说明 .23
III 目录 序......................................................................................................................................................................IX 前言..................................................................................................................................................................XI 程序列表........................................................................................................................................................ XII 图列表...........................................................................................................................................................XIV 表格列表..................................................................................................................................................... XVII 第一部分 并行程序设计基础.........................................................................................................................1 第1章 并行计算机......................................................................................................................................2 1.1 并行计算机的分类..........................................................................................................................2 1.1.1 指令与数据....................................................................................................................................2 1.1.2 存储方式 .......................................................................................................................................3 1.2 物理问题在并行机上的求解.........................................................................................................4 1.3 小结...................................................................................................................................................5 第2章 并行编程模型与并行语言.............................................................................................................6 2.1 并行编程模型..................................................................................................................................6 2.2 并行语言...........................................................................................................................................7 2.3 小结...................................................................................................................................................8 第3章 并行算法..........................................................................................................................................9 3.1 并行算法分类..................................................................................................................................9 3.2 并行算法的设计..............................................................................................................................9 3.3 小结................................................................................................................................................. 11 第二部分 基本的MPI并行程序设计...........................................................................................................12 第4章 MPI简介.........................................................................................................................................13 4.1 什么是MPI......................................................................................................................................13 4.2 MPI的目的 ......................................................................................................................................13 4.3 MPI的产生 ......................................................................................................................................14 4.4 MPI的语言绑定..............................................................................................................................14 4.5 目前主要的MPI实现.....................................................................................................................15 4.6 小结.................................................................................................................................................15 第5章 第一个MPI程序.............................................................................................................................16 5.1 MPI实现的 Hello World!” ..........................................................................................................16 5.1.1 用FORTRAN77+MPI实现...........................................................................................................16 5.1.2 用C+MPI实现..............................................................................................................................18 5.2 MPI程序的一些惯例......................................................................................................................21 5.3 小结.................................................................................................................................................22 第6章 六个接口构成的MPI子集............................................................................................................23 6.1 子集介绍.........................................................................................................................................23 6.1.1 MPI调用的参数说明....................................................................................................................23
612MP阿初始化 25 61.3MPI结束 5 6.14当前进程标识 615通信域包含的进程数 26 6.16消息发送 .26 617消息接收 .27 618返回状态status 7 619一个简单的发送和接收的侧 62AMPI预定义数据类型 63P1数据类型匹配和数据转 30 63.1MPI类型匹配规则 0 632数据转换 .32 64P消息 6AMP消息的组成 642任意源和任意标识 6.4.3MPI通信域. .35 65小结 35 第7章简单的MPI程序示何 36 7.1用P实现计时功能 36 12 取机器的名字和MPI 本号 38 7.3是否初始化及错误退出 74数据接力传送 41 75任意进程间相互问候 7.6任意源和任意标识的使用。 77写安全的MPI程序 7.8小纳 50 第8章MPI并行程序的两种基木模式 &.1对等模式的PI程序设计 81.1问题措述acoh迭代 812用MPI程序实现Jacob达代 813用捆绑发送接收实 acob 5 8.14引入虚拟进程后Jacobi选代的实现 8.2主从模式的P1程序设计 .62 821加连向量垂 62 822主进程打印各从进程的消息 小结 6 第9章不同通信模式MPI并行程序的设计 -69 9.】标准通信模式 .69 92罗存桶信楚式 70 93同步通信横式 9.4就绪通信模式 9.5小结 79 第10章MPICH的安装与MPI程序的运行. .80 I0.ILi坏境下的MPICH. 80
IV 6.1.2 MPI初始化...................................................................................................................................25 6.1.3 MPI结束.......................................................................................................................................25 6.1.4 当前进程标识..............................................................................................................................25 6.1.5 通信域包含的进程数...................................................................................................................26 6.1.6 消息发送 .....................................................................................................................................26 6.1.7 消息接收 .....................................................................................................................................27 6.1.8 返回状态status.............................................................................................................................27 6.1.9 一个简单的发送和接收的例子....................................................................................................28 6.2 MPI预定义数据类型......................................................................................................................29 6.3 MPI数据类型匹配和数据转换.....................................................................................................30 6.3.1 MPI类型匹配规则........................................................................................................................30 6.3.2 数据转换 .....................................................................................................................................32 6.4 MPI消息...........................................................................................................................................33 6.4.1 MPI消息的组成............................................................................................................................33 6.4.2 任意源和任意标识 ......................................................................................................................34 6.4.3 MPI通信域...................................................................................................................................35 6.5 小结.................................................................................................................................................35 第7章 简单的MPI程序示例....................................................................................................................36 7.1 用MPI实现计时功能.....................................................................................................................36 7.2 获取机器的名字和MPI版本号....................................................................................................38 7.3 是否初始化及错误退出................................................................................................................39 7.4 数据接力传送................................................................................................................................41 7.5 任意进程间相互问候....................................................................................................................43 7.6 任意源和任意标识的使用............................................................................................................46 7.7 编写安全的MPI程序.....................................................................................................................47 7.8 小结.................................................................................................................................................50 第8章 MPI并行程序的两种基本模式....................................................................................................51 8.1 对等模式的MPI程序设计 ............................................................................................................51 8.1.1 问题描述 — Jacobi迭代 ................................................................................................................51 8.1.2 用MPI程序实现Jacobi迭代..........................................................................................................52 8.1.3 用捆绑发送接收实现Jacobi迭代 .................................................................................................55 8.1.4 引入虚拟进程后Jacobi迭代的实现..............................................................................................60 8.2 主从模式的MPI程序设计 ............................................................................................................62 8.2.1 矩阵向量乘..................................................................................................................................62 8.2.2 主进程打印各从进程的消息 .......................................................................................................65 8.3 小结.................................................................................................................................................68 第9章 不同通信模式MPI并行程序的设计...........................................................................................69 9.1 标准通信模式................................................................................................................................69 9.2 缓存通信模式................................................................................................................................70 9.3 同步通信模式................................................................................................................................74 9.4 就绪通信模式................................................................................................................................76 9.5 小结.................................................................................................................................................79 第10章 MPICH的安装与MPI程序的运行.............................................................................................80 10.1 Linux环境下的MPICH.................................................................................................................80
1011安转 10.12主要日录介绍, 10.13编译命令 10.1,4执行步骤 10.1.5放权. 1016运行命今和和胃文件 83 10.1.7其它可执行命令 02id sNT环境下的MPICH 、 102. 1022编译 1023配置和运行 88 1024小结 第11音微见错误 2. 1山.1程序设计中的错误 91 11.2运行时的错误 113小结 94 第三部分高级MPI并行程序设计… 95 第12章非阻塞通信MPI程序设计 96 121阻塞通信 06 2】非阻塞通信简众 07 12.3非阻塞标准发送和接收 99 12.4非阻塞通信与其它三种迪信模式的组合 125非阻塞通信的完成」 .102 125.1单个非阳塞河信的完成 .102 12.52多个非阻塞通信的完成 10 12.6非阻塞通信对象 107 126.1非阻塞通信的取消 10 12.62非阻塞通信对象的释放, .109 127消息到试的检香 28非阻塞通信有序接收的语义约爽 113 12.9用非阻塞通信来实现Jacobi送代 113 12.10重复非阻塞通信 12.11用重复非阻塞通信米实现acobi迭代 119 12.12小结 .122 第13章组通信MPI程序设计 123 13.1组通信概球 13 1 13.12组通信的同步功能 .124 13.13组通信的计算功能 125 132广播 126 33收集 17 13.4散发 130 13.5组收集 132 13.6全互换 .135
V 10.1.1 安装...........................................................................................................................................80 10.1.2 主要目录介绍............................................................................................................................81 10.1.3 编译命令 ...................................................................................................................................82 10.1.4 执行步骤 ...................................................................................................................................82 10.1.5 放权...........................................................................................................................................83 10.1.6 运行命令和配置文件.................................................................................................................83 10.1.7 其它可执行命令........................................................................................................................86 10.2 Windows NT环境下的MPICH .....................................................................................................87 10.2.1 安装...........................................................................................................................................87 10.2.2 编译...........................................................................................................................................87 10.2.3 配置和运行................................................................................................................................88 10.2.4 小结...........................................................................................................................................91 第11章 常见错误......................................................................................................................................92 11.1 程序设计中的错误......................................................................................................................92 11.2 运行时的错误...............................................................................................................................93 11.3 小结...............................................................................................................................................94 第三部分 高级MPI并行程序设计...............................................................................................................95 第12章 非阻塞通信MPI程序设计..........................................................................................................96 12.1 阻塞通信.......................................................................................................................................96 12.2 非阻塞通信简介..........................................................................................................................97 12.3 非阻塞标准发送和接收..............................................................................................................99 12.4 非阻塞通信与其它三种通信模式的组合..............................................................................101 12.5 非阻塞通信的完成....................................................................................................................102 12.5.1 单个非阻塞通信的完成........................................................................................................... 102 12.5.2 多个非阻塞通信的完成........................................................................................................... 104 12.6 非阻塞通信对象........................................................................................................................107 12.6.1 非阻塞通信的取消 .................................................................................................................. 107 12.6.2 非阻塞通信对象的释放........................................................................................................... 109 12.7 消息到达的检查........................................................................................................................110 12.8 非阻塞通信有序接收的语义约束...........................................................................................112 12.9 用非阻塞通信来实现Jacobi迭代 ............................................................................................113 12.10 重复非阻塞通信......................................................................................................................116 12.11 用重复非阻塞通信来实现Jacobi迭代..................................................................................119 12.12 小结...........................................................................................................................................122 第13章 组通信MPI程序设计................................................................................................................123 13.1 组通信概述................................................................................................................................123 13.1.1 组通信的消息通信功能........................................................................................................... 123 13.1.2 组通信的同步功能 .................................................................................................................. 124 13.1.3 组通信的计算功能 .................................................................................................................. 125 13.2 广播.............................................................................................................................................126 13.3 收集.............................................................................................................................................127 13.4 散发.............................................................................................................................................130 13.5 组收集.........................................................................................................................................132 13.6 全互换.........................................................................................................................................135