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日