高性能计算之并行编程技术 一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
137同步 138 138归约 139 13.9MP1预定义的归的操作 13.10求 .14 13.11组归约 .144 13.2归约并敬发 145 1313扫妇描 146 13.14不同类型归约操作的荷单对比 1 15不正确的通信方式 .15 13.17用户自定义归约操作 .153 131R小结 155 第14章县有不连续数据发送的MPI得序设计 156 141派生数据类型 14.2新数据类型的定义 15 142.】连续复制的类型生成 .15 1422向量散据类型的生成 158 1423素引数据类型的生成 160 1424结数据类形的生成 162 425新类型递交和释 14.3地址函玩 17 144与数据类型有关的调用 .172 14.5下界标记类型和上界标记类型 175 46打包与解包 147小结 第15章MPI的进程组和通信域 15.1荷介 .182 】52讲甲组的管理 182 15.3诵信域的管理 15.4组间通信域 5.5属性信息 15.6小结 19% 第16章具有虚拟进程拓扑的MPI程序设计 199 16.1虑拟拓扑简介 /9g 162箱卡儿拓扑 19g 163图拓升 20 6.4再看Jacobi送代的例了 .20 165小结 2712 第17章MP对错误的处理 213 71与错误处理有关的避用 313 17.2小结 215 第18章MPI函数调用原型列表与简单解释 216 18.1P1-1与C语言的接▣. .216 18.2AMP1-1与Fortran语言的接口 223
VI 13.7 同步.............................................................................................................................................138 13.8 归约.............................................................................................................................................139 13.9 MPI预定义的归约操作..............................................................................................................141 13.10 求p值.........................................................................................................................................142 13.11 组归约.......................................................................................................................................144 13.12 归约并散发..............................................................................................................................145 13.13 扫描...........................................................................................................................................146 13.14 不同类型归约操作的简单对比.............................................................................................147 13.15 不正确的组通信方式..............................................................................................................149 13.16 MINLOC和MAXLOC................................................................................................................151 13.17 用户自定义归约操作..............................................................................................................153 13.18 小结...........................................................................................................................................155 第14章 具有不连续数据发送的MPI程序设计...................................................................................156 14.1 派生数据类型 ............................................................................................................................156 14.2 新数据类型的定义....................................................................................................................157 14.2.1 连续复制的类型生成............................................................................................................... 157 14.2.2 向量数据类型的生成............................................................................................................... 158 14.2.3 索引数据类型的生成............................................................................................................... 160 14.2.4 结构数据类型的生成............................................................................................................... 163 14.2.5 新类型递交和释放 .................................................................................................................. 164 14.3 地址函数.....................................................................................................................................171 14.4 与数据类型有关的调用............................................................................................................172 14.5 下界标记类型和上界标记类型...............................................................................................175 14.6 打包与解包................................................................................................................................177 14.7 小结.............................................................................................................................................181 第15章 MPI的进程组和通信域............................................................................................................182 15.1 简介.............................................................................................................................................182 15.2 进程组的管理 ............................................................................................................................182 15.3 通信域的管理 ............................................................................................................................187 15.4 组间通信域................................................................................................................................190 15.5 属性信息.....................................................................................................................................194 15.6 小结.............................................................................................................................................198 第16章 具有虚拟进程拓扑的MPI程序设计.......................................................................................199 16.1 虚拟拓扑简介 ............................................................................................................................199 16.2 笛卡儿拓扑................................................................................................................................199 16.3 图拓扑.........................................................................................................................................205 16.4 再看Jacobi迭代的例子.............................................................................................................208 16.5 小结.............................................................................................................................................212 第17章 MPI对错误的处理 ....................................................................................................................213 17.1 与错误处理有关的调用............................................................................................................213 17.2 小结.............................................................................................................................................215 第18章 MPI函数调用原型列表与简单解释.......................................................................................216 18.1 MPI-1与C语言的接口................................................................................................................216 18.2 MPI-1与Fortran语言的接口.....................................................................................................223
18.3MPL2与C语言的接口. 23 18.4MP-2与Fortrani语言的接口 2 185小结 第四部分MPI的最新发展MPI-2 259 第19章动态进程管理 260 19.1组间通信域 .260 19.2动态创建新的PI进程 261 19.3独立进程间的通信 26 10d基干0cker的通信 26 小结 第20章远程存储访问. .269 20.1简介 .269 202窗口的创建与窗口操作 270 202.1创建窗口 270 2022向窗口写 27 2023从窗口读 2024对窗口数据的运算 273 20.3密口同步管理. 275 2031提栏方式 275 20.32握手方式 16 20.33锁方式 7 20.4小结 280 第21章并行I/O 281 211撼球 28 212并行文件管理的基本操作 21.3显式偏移的并行文件读写 286 2131阻塞方式 2132非阻塞方式 .289 213.3两步非阻塞组调用 29 21.4多视口的并行文件并行读写 293 214.1文件视口与指针 0 21.42阻方式的视口读写 2143非阻塞方式的视口读写. 300 214.4两步非阳塞视口组调用方式 301 215共享文件读写 303 215.1阻寒共享文件读写 252非阻塞共享文件读写 2153两步非阻塞共享文件组读写 21.6分布式数组文件的存取 .377 217小结 …314 网上资源 315 参考文献… .316 vu
VII 18.3 MPI-2与C语言的接口................................................................................................................234 18.4 MPI-2与Fortran语言的接口.....................................................................................................243 18.5 小结.............................................................................................................................................258 第四部分 MPI的最新发展MPI-2 .............................................................................................................259 第19章 动态进程管理............................................................................................................................260 19.1 组间通信域................................................................................................................................260 19.2 动态创建新的MPI进程.............................................................................................................262 19.3 独立进程间的通信....................................................................................................................264 19.4 基于socket的通信......................................................................................................................268 19.5 小结.............................................................................................................................................268 第20章 远程存储访问............................................................................................................................269 20.1 简介.............................................................................................................................................269 20.2 窗口的创建与窗口操作............................................................................................................270 20.2.1 创建窗口 ................................................................................................................................. 270 20.2.2 向窗口写 ................................................................................................................................. 271 20.2.3 从窗口读 ................................................................................................................................. 272 20.2.4 对窗口数据的运算 .................................................................................................................. 273 20.3 窗口同步管理 ............................................................................................................................275 20.3.1 栅栏方式 ................................................................................................................................. 275 20.3.2 握手方式 ................................................................................................................................. 276 20.3.3 锁方式..................................................................................................................................... 278 20.4 小结.............................................................................................................................................280 第21章 并行I/O.......................................................................................................................................281 21.1 概述.............................................................................................................................................281 21.2 并行文件管理的基本操作.......................................................................................................282 21.3 显式偏移的并行文件读写.......................................................................................................286 21.3.1 阻塞方式 ................................................................................................................................. 286 21.3.2 非阻塞方式.............................................................................................................................. 289 21.3.3 两步非阻塞组调用 .................................................................................................................. 291 21.4 多视口的并行文件并行读写 ...................................................................................................293 21.4.1 文件视口与指针...................................................................................................................... 294 21.4.2 阻塞方式的视口读写............................................................................................................... 298 21.4.3 非阻塞方式的视口读写........................................................................................................... 300 21.4.4 两步非阻塞视口组调用方式 ................................................................................................... 301 21.5 共享文件读写 ............................................................................................................................303 21.5.1 阻塞共享文件读写 .................................................................................................................. 304 21.5.2 非阻塞共享文件读写............................................................................................................... 306 21.5.3 两步非阻塞共享文件组读写 ................................................................................................... 307 21.6 分布式数组文件的存取............................................................................................................311 21.7 小结.............................................................................................................................................314 网上资源........................................................................................................................................................315 参考文献........................................................................................................................................................316
中英文术语对照 318 本书介绍的MPI调用索引. 320 附录1MPI常量列表 325 附录2 MPICH12.1函数列表 329
VIII 中英文术语对照............................................................................................................................................318 本书介绍的MPI调用索引...........................................................................................................................320 附录1 MPI常量列表.............................................................................................................................325 附录2 MPICH 1.2.1函数列表..........................................................................................................329
序 高性能计算技术在国内外受到高度的重视。它在科学研究、工程技术、以及军事技术方 面的应用,已取得了巨大的成就。国际上科学家广泛认为:21世纪人类所面临的重要科技问 题(被称为“巨大挑战,Great Challenge”) 如人类基因、全球气候准确预报、海洋环流 环等等,没有万亿次以上的高性能计算机是无法解决的。军事上的核爆炸模拟,也必须使用 万亿次以上的高性能计算机。美国90年代的有关高性能计算技术的研究规划,如CC和 ASCI,都是在总统直接参与下制定的。在我国,高性能计算技术也受到各级领导部门的十 分的关注和重视。 从更广泛的意义上来看,计算,和理论与实验并列,被普遍认为是人类认识自然世界的 三大支柱。这种计算,主要是指应用于科学与工程的、以高性能计算机为平台的大规模并行 计算。它己成为一项学科,大规模科学与工程计算。而大规模并行计算也已成为研究科学与 工程技术的一种崭新的手段和方式:采用这种手段和方式的科学研究与工程技术研究设计, 则称为“计算方式的科学与工程(暂译名)”(Computational Science and Engineering)。例 如,著名的波音777飞机的设计,基本上是依靠高性能计算机的“无纸设计”,它可以大量节 省传统设计技术中的昂贵的风洞实验,设计时间也大大缩短。 高性能计算为平台的大规模并行计算,在我国也取得很大成果,并且,有力地推动交叉 学科的发展。在我们研制的清华大学THNPSC-.1和THNPSC-.2,以及在上海大学研制的自强 2000等高性能计算机的平台上,己有很多实际经验。我们和化学专家进行了“高分子链”的 研究计算,和化工专家进行了“石油化工超临界化学反应”的研究计算。我们和机械铸工专 家进行了“模具充模流体场”研究计算,和材料科学专家进行了“定量品体学微观研究”等 等。 上述这些“计算方式的科学与工程”研究,在各自学 中是属于前沿的;更重要的,其 中可以节省大量的实验;或者说,很多工作是实验所无法取代的。 采用计算方式来进行很多科学与工程领域的研究和设计,实际上是一种跨学科的创新的 源泉。我国对于计算方式的科学与工程的研究,显待愈来愈受重视,也愈来愈需要在各个领 域推广、其至普及。燃而,正是由干它是一顶跨学科的新生事物,根据我们实际经验,也两 到很多困难。主要问题是:非计算机学科的科学和工程技术人员, 能够熟练编写串行应用稻 序己经不易,而能够在高性能计算机上编写并行的应用程序,就更少了。这种情况严重影响 了我国高性能计算技术的发展,对于我国推广“计算方式的科学与工程”以至对于我国发 展高科技都很不利。 都志辉博土的这本书,“高性能计算之并行编程技术M川并行程序设计”,就是根据我 国这种情况和需要出发而编写的。主要是为了促进和推广“计算方式的科学与工程”的需要 为了非计算机专业的科学与工程人员学习并行编程的需要而编写的。计算机专业人员不熟悉 并行编程的科技人员,也可学习这本书。 目前,国内外在高性能计算机系统中,最广泛使用的并行编程环境是MP叫,它也已成为 国际上的一种并行程序的标准。作者以MPI并行编程设计,作为专门阐述高性能计算并行编 程技术的第一本书出版,是很有意义的。作者本人在北京大学博士生研究期间,在清华大学 从事博士后研究和毕业后的工 去门从电干并行得 的编译研究,从事于THNPSC-1 THNPSC--2和自强2000高性能计算机的设计、应用和并行编程的工作,因此,他的这本书是 在他多年的实际研究和工作经验的基础上写成的。这就使这本书具有一定特定的意义。 作者对于并行编程技术,由浅入深,先介绍并行程序设计的基本知识和MP的基本功能、 过程和框架。然后,再阐述MPI程序设计的高级特征,使读者可以编写一些高效的MPI并行
IX 序 高性能计算技术在国内外受到高度的重视 它在科学研究 工程技术 以及军事技术方 面的应用 已取得了巨大的成就 国际上科学家广泛认为 21世纪人类所面临的重要科技问 题 被称为 巨大挑战, Great Challenge” , 如人类基因 全球气候准确预报 海洋环流循 环等等 没有万亿次以上的高性能计算机是无法解决的 军事上的核爆炸模拟 也必须使用 万亿次以上的高性能计算机 美国90年代的有关高性能计算技术的研究规划 如HPCC和 ASCI 都是在总统直接参与下制定的 在我国 高性能计算技术也受到各级领导部门的十 分的关注和重视 从更广泛的意义上来看 计算 和理论与实验并列 被普遍认为是人类认识自然世界的 三大支柱 这种计算 主要是指应用于科学与工程的 以高性能计算机为平台的大规模并行 计算 它已成为一项学科 大规模科学与工程计算 而大规模并行计算也已成为研究科学与 工程技术的一种崭新的手段和方式 采用这种手段和方式的科学研究与工程技术研究设计 则称为 计算方式的科学与工程 暂译 名 (Computational Science and Engineering) 例 如 著名的波音777飞机的设计 基本上是依靠高性能计算机的 无纸设计 它可以大量节 省传统设计技术中的昂贵的风洞实验 设计时间也大大缩短 高性能计算为平台的大规模并行计算 在我国也取得很大成果 并且 有力地推动交叉 学科的发展 在我们研制的清华大学THNPSC-1和THNPSC-2 以及在上海大学研制的自强 2000等高性能计算机的平台上 已有很多实际经验 我们和化学专家进行了 高分子链 的 研究计算 和化工专家进行了 石油化工超临界化学反应 的研究计算 我们和机械铸工专 家进行了 模具充模流体场 研究计算 和材料科学专家进行了 定量晶体学微观研究 等 等 上述这些 计算方式的科学与工程 研究 在各自学科中是属于前沿的 更重要的 其 中可以节省大量的实验 或者说 很多工作是实验所无法取代的 采用计算方式来进行很多科学与工程领域的研究和设计 实际上是一种跨学科的创新的 源泉 我国对于计算方式的科学与工程的研究 显得愈来愈受重视 也愈来愈需要在各个领 域推广 甚至普及 然而 正是由于它是一项跨学科的新生事物 根据我们实际经验 也遇 到很多困难 主要问题是 非计算机学科的科学和工程技术人员 能够熟练编写串行应用程 序已经不易 而能够在高性能计算机上编写并行的应用程序 就更少了 这种情况严重影响 了我国高性能计算技术的发展 对于我国推广 计算方式的科学与工程 以至对于我国发 展高科技都很不利 都志辉博士的这本书 高性能计算之并行编程技术---MPI并行程序设计 就是根据我 国这种情况和需要出发而编写的 主要是为了促进和推广 计算方式的科学与工程 的需要 为了非计算机专业的科学与工程人员学习并行编程的需要而编写的 计算机专业人员不熟悉 并行编程的科技人员 也可学习这本书 目前 国内外在高性能计算机系统中 最广泛使用的并行编程环境是MPI 它也已成为 国际上的一种并行程序的标准 作者以MPI并行编程设计 作为专门阐述高性能计算并行编 程技术的第一本书出版 是很有意义的 作者本人在北京大学博士生研究期间 在清华大学 从事博士后研究和毕业后的工作期间 专门从事于并行程序的编译研究 从事于THNPSC-1 THNPSC-2和自强2000高性能计算机的设计 应用和并行编程的工作 因此 他的这本书是 在他多年的实际研究和工作经验的基础上写成的 这就使这本书具有一定特定的意义 作者对于并行编程技术 由浅入深 先介绍并行程序设计的基本知识和MPI的基本功能 过程和框架 然后 再阐述MPI程序设计的高级特征 使读者可以编写一些高效的MPI并行
程序。本书的一个特点是:作者在向读者讲翰MP编程技术时,采用了大量的编程的实例, 对于关键部分还给出了注释,使读者能更好地掌P编程的能力,而不只是理论知识。作 者在这本书的后面部分 还介绍了高级和较复杂的MPI并行程序编写技术。最后,作者还向 读者介绍 MPI的新发展,即MPI2。比较深入了解高性能计算技术和应用的读者都知道 高性能计算的应用,更为深入的实质性问题是计算的效率问题,这是和串行程序有很大的不 同,作者在本书的很多章节中,都贯穿了论述并行编程的效率,这也是本书的另一个重要特 点。由于这本书,理论和实际结合较好,对于计算机领域的高年级学生和非计算机专业的研 究生,可以用作教科书:对于已经工作的科技人品,有效地较快堂握并行绾程技术是很有用 的。在短期培训班,也可采用此书的部分章节来使用, 我们已经进入了 个新的世纪。我们的祖国也将进入一个“科技强国”的新时期。高性 能计算技术的推广应用,肯定将对我国高科技的发展,起到很重要的作用。我衷心希望:这 本书的出版,将对高性能计算技术在我国的推广,对于科技人员尽快掌握并行编写程序的技 术,能够作出应有的贡献。 中国工程院院士 清华大学教授 李三立 2001年2月2日
X 程序 本书的一个特点是 作者在向读者讲解MPI编程技术时 采用了大量的编程的实例 对于关键部分还给出了注释 使读者能更好地掌握MPI编程的能力 而不只是理论知识 作 者在这本书的后面部分 还介绍了高级和较复杂的MPI并行程序编写技术 最后 作者还向 读者介绍了MPI的新发展 即MPI-2 比较深入了解高性能计算技术和应用的读者都知道 高性能计算的应用 更为深入的实质性问题是计算的效率问题 这是和串行程序有很大的不 同 作者在本书的很多章节中 都贯穿了论述并行编程的效率 这也是本书的另一个重要特 点 由于这本书 理论和实际结合较好 对于计算机领域的高年级学生和非计算机专业的研 究生 可以用作教科书 对于已经工作的科技人员 有效地较快掌握并行编程技术是很有用 的 在短期培训班 也可采用此书的部分章节来使用 我们已经进入了一个新的世纪 我们的祖国也将进入一个 科技强国 的新时期 高性 能计算技术的推广应用 肯定将对我国高科技的发展 起到很重要的作用 我衷心希望 这 本书的出版 将对高性能计算技术在我国的推广 对于科技人员尽快掌握并行编写程序的技 术 能够作出应有的贡献 中国工程院院士 清华大学教授 李三立 2001年2月2日