高性能计算:现代系统与应用实践
作者 : [美] 托马斯·斯特林(Thomas Sterling) 马修·安德森(Matthew Anderson) 马切伊·布罗多维茨(Maciej Brodowicz) 著
译者 : 黄智濒 艾邦成 杨武兵 李秀桥 译
出版日期 : 2020-02-26
ISBN : 978-7-111-64579-5
定价 : 149.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 594
开本 : 16
原书名 : High Performance Computing: Modern Systems and Practices
原出版社: Elsevier (Singapore) Pte Ltd
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书内容全面且易学易懂,不仅涵盖高性能计算的基础概念和知识点,同时重视核心技能的培养。通过阅读本书:资深研究者将学习如何将超级计算机作为寻求新知识的重要工具;新手工程师将体验超级计算机如何运用高性能计算系统和方法来设计和模拟创新产品;学生将会了解未来高性能计算研究和开发的可能方向,为职业生涯做好准备;商用集群的维护和管理者将在掌握高性能计算系统的功能的基础上,学习如何更好地使用它们。

图书特色

戈登·贝尔亲笔作序,回顾并展望超算领域的发展之路
戈登·贝尔奖获得者及其团队撰写,打造多路径的高效学习曲线
入门级读物,全面涵盖重要的基础知识和实践技能
High Performance Computing
Modern Systems and Practices
高性能计算
现代系统与应用实践
     托马斯·斯特林(Thomas Sterling)
         [ 美 ]  马修·安德森(Matthew Anderson)       著
          马切伊·布罗多维茨(Maciej Brodowicz)
   黄智濒 艾邦成 杨武兵 李秀桥   译

图书前言

本书的目的
高性能计算(HPC)是一个多学科领域,结合了硬件技术和架构、操作系统、编程工具、软件以及最终用户问题和算法。为了有能力参与HPC活动,需要一些必要的概念、知识和技能,通常需要在相关机构进行学习,这些机构拥有专家、设施和任务目标,但这样的机构并不太多。无论一个人的目标是与特定的最终用户领域(如科学、工程、医学或商业应用)相关联,还是专注于使超级计算有效地支持系统技术和方法,入门级从业者必须紧密结合广泛的、清晰的且相互关联和依存的领域,而且需要了解其协同作用才能领悟这些专业知识。学习材料可能很容易就找到十几本书和手册,但即使它们组合在一起,也无法提供充分体现整个领域的必要视角,无法成为指导学生获得足够专业知识的有效途径。
本书旨在弥合无数狭隘的焦点问题来源与跨越和互连各种学科(构成HPC领域)的单一来源需求之间的差距。它是一本入门级读物,需要最少的预备知识,提供了对这些领域及其相互影响(使超级计算成为一个跨学科领域)的完整理解。从实践的角度来看,本书针对并行编程、调试、性能监控、系统资源使用和工具以及结果可视化等有用的技术来培养读者的特定技能。这些技能涉及的基础概念相对而言变化较小,而关于硬件和软件系统组件的详细属性的知识更有可能随着时间的推移而发展。
本书支持单学期课程,以便初学者为超级计算中的各种角色做好准备,实现他们所选择的职业目标。它适合致力于使用超级计算机来解决科学、工程或社会领域等应用需求的未来的计算科学家。它为系统设计人员和工程师提供硬件和软件的可能目标功能的基本描述。对于希望研究超级计算本身的研究人员,作为传统系统和实践的介绍性演示,以及作为这个激动人心的探索领域面临的挑战的代表,本书也是一本基础读物。本书同样适合那些为超级计算环境提供技术支持的人员,例如数据中心和系统管理员、操作员和管理人员。在提供给未来的专业人员时,本书可以以多种方式来使用。它可为超级计算提供基础信息,为课堂教学提供一系列讲座内容。它使用大量示例来说明实际操作方法,所有这些都可以在并行计算机上执行,以及在实践时指导学生进行练习。它通过易于学习的风格明确了技能组合和训练方法。概念以详细且易于理解的形式呈现,以揭示方法背后的“原因”,并根据基本事实、相关因素和敏感性协助未来用户进行决策。最后,本书在同一上下文中统一了与多个子学科相关的许多事实,这些子学科组合构成了超级计算领域。
本书的组织结构
本书可以满足读者最初的好奇心、兴趣和参与HPC活动所需技能要求,通过学习本书,可以最终搭建起知识、能力和熟练程度之间的桥梁。对于追求各种潜在专业路径的人来说,本书是一个起点,其中这些路径在先进系统的性质和用途方面具有共同的基础。无论读者是否最终能够搭建硬件或软件系统,他们都能使用此类系统作为追求科学、工程、商业或安全等其他领域的关键工具来进行研究,从而有助于设计和推动支持当前HPC发展的未来方法,或管理、经营和维护供其他用户使用的HPC系统。本书的各个章节构成了一个无缝的主题流,每个主题都可以从前导主题中受益,同时也为后续主题提供基础。因此,本书按HPC使用的早期基本技能的顺序讲解主要主题,即使有可能过早涉及需要深入理解这些复杂系统及其使用才能掌握的基础概念。必要时,书中会给出主题的介绍性描述,其中包含足够的信息以帮助读者了解其他相关的主题,但只在后面的章节中进行更深入的回顾。通过学习多样化的相互关联的主题领域,读者的理解力和能力可以逐步增强。
本书是关于计算性能的。对于当前和下一代系统,这意味着可以利用工作负载并行性来实现可扩展性和管理数据的方法,从而实现操作效率。下面列出了4个主要的总体主题领域。
系统硬件架构和支持技术。
编程模型、接口和方法。
系统软件环境、支持和工具。
并行算法和分布式数据结构。
基于逻辑流程,本书给出了一目了然的教学组织结构。但HPC还有另一个方面:组织与协调并行性和数据管理的替代策略,以及有助于每个组件层的角色。
本书介绍了4种主要策略。
作业流并行性、吞吐量或容量计算。
顺序进程的通信或消息传递。
多线程共享内存。
SIMD或图形处理单元(GPU)加速。
从教学角度来看,作者希望传达三种信息以促进学习过程,并希望也能让读者得到享受。基础层面是概念,建立对基本原则的理解以帮助学习HPC的形式和功能。接下来会介绍许多基本信息及文化(什么人、什么事情、什么时候),这些事实构成了必要的知识集合,提供了该领域的框架。最后讲授一些实践技能。诚然,这三个层面彼此并不交叉。在每种情况下,本书都将案例的所有材料以这三种形式之一的方式来呈现。例如,标题以“……的基础”结尾的章节(例如“OpenMP的基础”)被精心设计为具有教程演示风格的模块,以便简化学习。虽然概念和知识的混合是不可避免的,但是我们会单独强调其中的一项。这种区别的重要性在于,虽然关于这个快速发展的领域的大部分知识将会改变,甚至在某些情况下已经过时,但基本概念随着时间的推移而保持不变,即使某些特定机器或语言的细节可能变得无关紧要,但这些知识也将帮助读者加强对相关领域的长期理解。
本书首先根据4个独立的并行计算模型来组织章节,然后根据基本概念对每个模型展开讨论,重点关注支持它们的系统体系结构的相关知识,以及针对每类系统进行编程的相关技能。在准备本书内容时,一些初始材料(包括介绍性章节)构成了本书的基本前提和背景。4个并行计算模型中的每一个都是根据概念、知识细节和编程技巧来描述的。虽然本书涵盖了理解和编程HPC系统所需的大部分有用信息,但忽略了与环境和工具相关的一些交叉主题,这些主题也是系统完整上下文的一个重要甚至普遍的方面。但是,对这些主题的介绍超出了初学者学习的范围。毕竟,本书目的是为读者提供高效的工作能力,以便在专业工作场所利用超级计算机实现各种目的。因此,本书以有效的顺序给出了许多重要且有用的工具和使用方法。最后,读者可以清楚地了解HPC应用的广泛领域,并且在这个背景下选择贴合本书的主题。这可以用来指导未来的计划,以及根据读者的最终职业目标选择更高级的课程。本书的总体结构和流程总结如下。
Ⅰ.绪论和基本思想(第1~4章)
这些章节介绍基础知识,主要包括:执行模型,体系结构的概念、性能和并行度量,以及并行计算系统(商品集群)的主流类型等。通过使用专门的基准测试程序来提供运行并行程序的初次实验,这些基准测试程序可以在不同的HPC系统之间进行测量和比较。正是在这些章节中,我们首先为读者营造了一种历史感,帮助初学者了解对领域有贡献的思想演变过程以及该领域的文化。
Ⅱ.针对作业流并行的吞吐量计算(第5章和第11章)
在利用并行计算机的最简单方法中,广泛使用的吞吐量计算(也称为容量计算)足以满足许多目标和工作流。可以证明它是效率最高的,因为它通常表现出最粗粒度的任务和最少的控制开销。我们将介绍管理作业流工作负载时广泛使用的中间件,如SLURM和PBS,包括独立作业和相关集的管理等案例,例如参数扫描和蒙特卡罗模拟应用程序。
Ⅲ.共享内存的多线程计算(第6章和第7章)
用户并行处理的主要模型之一是共享内存上下文的任务(或线程)并行。所有用户数据都可以由任何用户线程直接访问,并且顺序一致性由硬件高速缓存一致性来保证。本书的这部分描述了这种并行执行模型、共享内存多处理器的特性以及OpenMP并行编程语言。
Ⅳ.消息传递计算(第8章)
对于可在单个应用上使用100万个或更多个处理器核的真正可扩展并行计算而言,分布式内存架构和顺序进程执行模型间的通信是主流方法。本书的这部分建立在一些主题的基础之上,包括用于SMP的节点,以及先前针对吞吐量计算描述的集群方法等,并添加了消息传递、聚合操作和全局同步的语义。这一章介绍了消息传递接口(MPI),这是最广泛用于可扩展科学和工程应用的编程接口。
Ⅴ.加速GPU计算(第15章和第16章)
对于某些广泛使用的数据流模式,专用核心的更高级结构可以提供卓越的性能和能源效率。这种在最一般意义上被分类为“加速器”的子系统可以多次加速应用程序,有时可以获得超过一个数量级的加速。这些加速器也被称为GPGPU,它们通常采用附加阵列处理器的形式,但在某些情况下集成在单插槽封装甚至相同的芯片中。本书的这部分描述了GPU结构、可用产品和编程,重点是编程接口OpenACC。
Ⅵ.构建重要的程序(第9、10、12~14章)
至此,读者要非常了解HPC的主要模式,了解主要编程接口的规则,并具有在这些框架内使用基本并行函数的实践经验。但是对于更复杂、更尖端、更有用或者说更专业的超级计算程序来说,还需要许多其他方法和工具。本书的这部分会将HPC新手从初学者级别提升到有一定能力的学徒级别。这里介绍了几个关键主题和技能,帮助学生掌握关于系统设计和应用的必要能力。在这些技能之中,首要的是针对各种需求的各类并行算法。其中许多已经在称为“库”的集合中提供了,如果使用得当,它们可以为应用程序开发人员节省大量时间。要使程序从初稿发展到最终正确有效的形式,需要采用并行调试的组合方法,以通过操作监控来确定答案的正确性和性能优化。这里介绍了有关工具和方法,包括所需的详细技能组合。最后,HPC运行往往会在单次执行中产生大量的数据,多达太字节(terabyte,即1012字节)或拍字节(petabyte,即1015字节)。从大量数据集生成图像甚至视频的科学可视化,是我们了解计算的模拟结果的唯一实用方法。本部分提供了用于此目的的广泛使用的工具示例,并对其基本技术进行了说明,使读者能掌握用法。
Ⅶ.使用真实系统(第11、17~20章)
HPC系统并不是在真空中运行的,如果不与外界连接则没有什么价值。在本书中,读者可以看到系统环境的必要部分,这些章节对操作系统及其与外部世界的接口进行了有针对性的全面描述。特别是在硬件和软件级别描述了大容量存储,它通过文件系统持久存储大块数据。作为使用文件系统的示例,我们详细描述了MapReduce算法,它对于大数据问题非常流行。文件系统还可通过检查点-重启方法提高可靠性。在系统可能发生故障的情况下,该技术周期性地将应用程序的中间数据状态的快照存储在大容量存储器上。如果发生这种情况,应用程序可以不必从头开始重新启动,而是在最后一个已知的良好检查点重新启动,从而节省了大量时间来获得解决方案。
Ⅷ.下一步(第21章)
到了这里,读者已经学完了关于HPC的介绍性内容,但是接下来去哪里?这些系统及其应用领域还有很多,可以纳入任何单独的教科书中,本书已经做了很好的铺垫工作。学生可以清楚地了解前面的内容,并根据个人的兴趣或目标,明确下一步要了解哪些方面。这一章列出了超出本书范围的HPC领域,并突出了与不同专业目标相关的不同领域。但是接下来还有另一个方面:HPC领域会走向哪里?因为这一领域正在迅速变化,本章最后概述了HPC面临的挑战及推动它继续发展的机遇。
目标读者
本书面向具有不同背景的广大读者,希望每个人都能够成功地学习这些主题。具有C语言编程知识是最基本的先决条件,并且需要熟悉类UNIX操作系统,而且能操作。但据了解,这些要求对某些人来说可能过于严格。因此,本书的附录包括两个教程。附录A讲解C编程语言,包含足够多的细节知识。但它并不是计算机编程的入门读物,因为我们预期读者有使用Python、Java、Fortran或MATLAB等其他编程语言编写程序的经验。附录B提供了完成本书中所有任务所需的用户界面相关知识和技术。
本书可为广泛的读者群体提供服务,包括(但不限于):
研究科学家。
科学、工程和社会领域的计算科学家。
HPC研究人员。
未来的工程师和HPC系统开发人员。
HPC系统管理员和数据中心经理。
如何使用本书
本书旨在根据特定读者的需求,提供多种不同的学习和讲授方法。
要想一开始就对HPC有全面深入的了解,可以从头到尾阅读本书。本书章节的顺序是经过精心组织的,每章都建立在前几章的基础上,涉及相关的概念、知识和技能。文中的示例足以代表这些知识点,以便读者顺利掌握。
另一方面,可以阅读以“……的基础”为标题的章节,以将本书作为一本教程来学习。这些章节旨在以最少的背景和上下文信息培养读者的技能。
通过选择关键章节可以实现重点阅读。本书呈现了4种并行计算模型:吞吐量、消息传递、共享内存和基于加速器。但在某些情况下,读者或教育工作者只需要了解其中一个,因此读者可能只需要沉浸在所需章节的子集中。例如,课程可以使用OpenMP或MPI,但不需要同时使用两者。对于基本的作业流并行,这两者都可以跳过,而是专注于SLURM或PBS进行吞吐量计算。

上架指导

计算机\高性能计算

封底文字

本书是掌握超级计算的重要指南和参考。它填补了培训领域科学家和工程师,特别是计算机科学家的学术课程中的重要缺失环节。
——戈登·贝尔(同名的戈登·贝尔奖是高性能应用领域的最高奖项)

高性能计算涉及硬件架构、操作系统、编程工具和软件算法等跨学科的知识,学习曲线较长。本书从中提炼出核心知识及技能,为初学者构建了一条易于理解的学习路径,夯实基础的同时注重培养实战能力。

书中首先介绍基础知识,包括执行模型、体系结构、性能度量、商品集群等;接着讲解吞吐量计算、共享内存计算、消息传递计算和加速GPU计算,围绕这些模型的概念、细节及编程实践展开讨论;然后引导读者构建应用程序,涵盖并行算法、库、可视化及性能优化等;最后,考虑真实系统环境,讨论了操作系统、大容量存储、文件系统及MapReduce算法等。书中通过大量示例来说明实际操作方法,这些均可在并行计算机上执行,以帮助读者更好地理解方法背后的原因。

推荐阅读方式

本书提供了多种学习路径,建议读者按照自己的需求进行学习:
·全面式阅读。从头到尾的细读将帮助你获得全面且深入的理解。所有章节都经过精心组织,知识结构层层递进。
·指南式阅读。挑选以“……的基础”为标题的章节,作为一本快捷知识指南或教程,所要求的预备知识最少。
·精选式阅读。根据自己的需求,精读关键章节,如从四种并行计算模型中进行挑选,或在学习基本的作业流并行时专注于SLURM或PBS。

图书序言

高性能计算是贝克尔和斯特林于1994年创建的Beowulf集群方案的必由后续产品,用于利用商品硬件构建可扩展的高性能计算机(也称为超级计算机)。Beowulf使各地的团队都能建立自己的超级计算机,现在全球有数百个Beowulf集群在运营。这本内容全面的书籍填补了培训领域科学家和工程师,特别是计算机科学家的学术课程中的重要缺失环节。读者将会了解在构成当今超级计算机的计算元件(核心)的聚集体上,如何创建和运行(例如,控制、调试、监视、可视化、改进)并行程序。
掌握了这些不断增加且可扩展的并行计算机,读者将有机会进入相对较小但不断增长的技术精英阶层,这是本书的目标。为了避免读者误认为这个名称并不重要,我们举例说明:1988年的第一次会议是ACM/IEEE超级计算大会,也称为Supercomputing 88;2006年,该名称演变为高性能计算、网络、存储和分析国际会议,缩写为SCXX;大约11 000人参加了SC16。
虽然很难描述什么样的计算机才算是一台“超级计算机”,但是当我看到它时,我知道它就是超级计算机。1961年出现的第一台超级计算机是劳伦斯·利弗莫尔国家实验室的UNIVAC LARC(利弗莫尔高级研究计算机),它由爱德华·泰勒研制,用于核武器设计的水动力模拟。就我个人而言,我从未参观过它。LARC由几十个密集封装的电路板组成,这些电路板由几千英里(1英里= 1609.344米)长的电缆互连,一些计算单元以100kHz的频率工作。2016年,中国最大的神威·太湖之光超级计算机的运行速度比LARC快了1万亿倍。它由超过1000万个处理核心组成,每个核以1.5GHz的频率运行,功耗为15MW。计算机安装在4排机柜中,每排40个机柜,每个机柜包含256个物理节点。它具有四个互连的8MB处理器,控制64个处理单元或核心。因此,1060万个处理单元提供峰值为125千万亿次的浮点运算/秒,即160个机柜×256个物理节点×4个核心组×(1个MPE + 8×8个CPE)个处理单元或核心,具有1.31PB存储器(160×256×4×8GB)。500强超级计算机中的一些具有O(10000)量级的计算节点,这些节点连接和控制具有O(100)量级核的图形处理单元(GPU)。今天,计算程序开发人员面临的挑战是设计程序的架构和实现,以利用这些具有兆级数量处理器的计算机。
从用户的角度来看,“理想的高性能计算机”具有无限快速的时钟,能执行单指令流程序,该程序对存储在无限大且快速的单存储器中的数据进行操作,并且具有任何大小以适应任何预算或问题。1957年,巴科斯基于Fortran语言建立了冯·诺依曼编程模型。从20世纪60年代到90年代初,这是超级计算的第一个时代,或者说“克雷”时代,我们看到了硬件的发展。通过提高处理器速度,流水线化指令流,使用单指令处理向量,最后为单存储器计算机中存储的程序添加处理器,超级计算实现了对这种简单易用的理想模型的支持。到20世纪90年代初,单台计算机向理想模型的演变已经停止:时钟频率达到GHz级别,通过互连访问单个存储器的处理器数量限制在几十个。尽管如此,有限规模的多处理器共享内存可能是最直接的编程和使用方式!
幸运的是,在20世纪80年代中期,“杀手级微处理器”到来了。它通过互连日益强大的计算机,展示了成本效益和无限扩展能力。不幸的是,这个多计算机时代要求放弃Fortran的单存储器和单个顺序程序的理想。因此,“超级计算”已经从西摩·克雷时代(1960~1995年)的单台(单存储器)计算机的硬件工程设计挑战演变为使用多台计算机有效运行程序的软件工程设计挑战。程序首先运行在64个处理单元上(1983年),然后是1000个处理单元上(1987年),现在则在数千台完全分布式(单存储器)的计算机上的1000万个处理单元上(2016年)。实际上,今天的高性能计算(HPC)节点就像十年前的超级计算机一样,因为处理单元每年增长36%,从1987年的1000台计算机增长到1000万个处理单元(包含在100 000个计算机节点中)。
本书是掌握超级计算的重要指南和参考,作者列举了并行化、创建和运行这些大型并行和分布式程序结构的复杂性和微妙之处。例如,最大的气候模型同时模拟了海洋、冰、大气和陆地,由十几名领域科学家、计算数学家和计算机科学家组成的团队来创建。
程序创建包括了解处理资源集合的结构及其与不同计算机的交互,从多处理器到多计算机(第2章和第3章),以及各种并行化总体策略(第9章)。其他主题包括并行程序各部分之间的同步和消息传递通信(第7章和第8章),构成程序的附加库(第10章),文件系统(第18章),长期大容量存储(第17章),结果可视化的组件(第12章)。对于一个系统而言,标准基准可以给出并行程序的运行情况(第4章)。第16章和第17章介绍和描述了控制加速器和特殊硬件核心(尤其是GPU)的技术,这些核心连接到节点,为每个节点提供额外的两个数量级的处理能力。这些附件是克雷时代的向量处理单元的替代品,并且以计算统一设备架构(CUDA),以及跨不同加速器封装的并行性的模型和标准为代表。
与在个人计算机、智能手机或浏览器中交互运行的程序的创建、调试和执行不同,超级计算机程序通过批处理控制来提交。运行程序需要向计算机指定使用的批处理控制语言和命令来控制程序所需的资源和条件(第5章),通过调试使程序进入可靠和可信赖状态(第14章),检查点(即及时保存中间结果)作为计算投入的保险(第20章),通过性能监测(第13章)发展和提高程序的有效性。
第21章介绍了移动超级计算机的问题和替代方案,以及将它们用于千万亿次运算级及以上规模的能力。事实上,本书中唯一没有描述的是令人难以置信的团队合作,以及编写和管理HPC代码时所面临的团队规模的发展。然而,团队合作最关键的方面在于个人成员的能力。这本书正是你所需要的指南。

戈登·贝尔
2017年10月

译者序

中国超算系统的研制水平和产业化能力经过十多年的快速发展,已经跻身世界先进水平。2016年,中国超级计算系统不仅连续8次夺取世界500强的第一名,连续两次夺取500强列榜数量冠军,而且在全球超算大会SC16上首次获得了戈登·贝尔奖;2017年,神威·太湖之光继续领跑,与天河二号一起连续5年共10次夺取世界500强的第一名,创下新的历史纪录。虽然在2018年11月最新的500强排名中,美国制造的两台超算系统Summit和Sierra超过神威·太湖之光,但是,我国超级计算机硬件的整体研制水平在国际上依然领先,继续向百亿亿次(E级)超算的高地进军。
目前, 人工智能/深度学习、大数据/云计算、科学计算、航空航天、政府电信、气象石油和工业制造等应用领域对超强计算能力的需求呈井喷式增长,特别是人工智能和深度学习领域的巨大推动力使得企业和科研院所纷纷投入巨资建设新超算系统,进而使得未来超算领域面临巨大的人才需求。懂超算、会用超算、用好超算成为目前很多机构面临的挑战之一。
超级计算或者说高性能计算,是一个融合多学科领域,结合硬件技术和架构、操作系统、编程工具、软件以及最终用户问题和算法的综合性领域。无论是计算机专业的人员,还是其他应用领域的人员,掌握与高性能计算相关的知识都需要较长的学习曲线,在这些跨学科的浩如烟海的知识中,搭建从入门到精通的必备知识技能框架是非常有益的尝试。本书的作者都是长期从事高性能计算机研制和超算应用的专家,他们的视角和给出的知识体系框架对于高性能计算的从业人员非常有帮助。
虽然译者长期从事高性能计算体系结构研究和应用方面的工作,但是在翻译的过程中,依然感受到本书涉及的内容之多,覆盖面之广。译者力求准确反映原著表达的思想和概念,但受限于水平,难免有错漏瑕疵之处,恳请读者及同行批评指正。意见和建议请发往huangzb@bupt.edu.cn,不胜感激。
最后,感谢家人和朋友的支持与帮助。同时,要感谢在本书翻译过程中做出贡献的人,特别是北京三帆中学黄天量,北京邮电大学何若愚、董丹阳、罗婷、吕滢、苏欣妍、李紫玥、赵达非、章靖童、张涵和汤洋等。还要感谢机械工业出版社的各位编辑,以及北京邮电大学计算机学院和中国航天空气动力技术研究院的大力支持。

黄智濒 艾邦成 杨武兵 李秀桥
2019年10月
于北京邮电大学

图书目录

译者序
序言
前言
致谢
第1章 绪论 1
1.1 高性能计算学科 2
1.1.1 定义 3
1.1.2 应用程序 3
1.1.3 性能和指标 3
1.1.4 高性能计算系统 4
1.1.5 超算问题 6
1.1.6 应用编程 7
1.2 超算对科学、社会和安全的影响 8
1.2.1 促进欺诈检测和市场数据分析 8
1.2.2 发现、管理和分配石油和天然气 8
1.2.3 加快制造业的创新 9
1.2.4 个性化医药和药物发现 9
1.2.5 预测自然灾害和了解气候变化 10
1.3 超级计算机剖析 11
1.4 计算机性能 13
1.4.1 性能 13
1.4.2 峰值性能 13
1.4.3 持续性能 14
1.4.4 可扩展性 15
1.4.5 性能退化 15
1.4.6 性能提升 17
1.5 超级计算机简史 17
1.5.1 第一个阶段—利用机械技术的自动计算机 18
1.5.2 第二个阶段—真空管时代的冯·诺依曼架构 19
1.5.3 第三个阶段—指令级并行 23
1.5.4 第四个阶段—向量处理和积分 24
1.5.5 第五个阶段—单指令多数据阵列 27
1.5.6 第六个阶段—顺序处理器的通信和超大规模集成电路 27
1.5.7 第七个阶段—多核和千万亿次 30
1.5.8 新数字时代和超越摩尔定律 30
1.6 作为学生的指南和工具 31
1.7 本章小结及成果 32
1.8 练习 33
参考文献 34
第2章 HPC架构:系统和技术 35
2.1 引言 35
2.2 HPC架构的关键特性 36
2.2.1 速度 36
2.2.2 并行性 36
2.2.3 效率 37
2.2.4 功率 37
2.2.5 可靠性 38
2.2.6 可编程性 38
2.3 并行架构家族—弗林分类法 39
2.4 支持技术 41
2.4.1 技术阶段 41
2.4.2 技术的角色 44
2.4.3 数字逻辑 45
2.4.4 存储技术 47
2.5 冯·诺依曼顺序处理器 50
2.6 向量和流水线 52
2.6.1 流水线并行 53
2.6.2 向量处理 55
2.7 单指令多数据阵列 56
2.7.1 单指令多数据架构 56
2.7.2 阿姆达定律 57
2.8 多处理器 59
2.8.1 共享内存多处理器 60
2.8.2 大规模并行处理器 62
2.8.3 商品集群系统 62
2.9 异构计算机结构 63
2.10 本章小结及成果 64
2.11 练习 65
参考文献 67
第3章 商品集群 68
3.1 引言 68
3.1.1 商品集群的定义 68
3.1.2 集群的动机和理由 69
3.1.3 集群元素 70
3.1.4 对500强名单的影响 70
3.1.5 简史 71
3.1.6 章节指南 73
3.2 Beowulf集群项目 74
3.3 硬件架构 76
3.3.1 节点 76
3.3.2 系统区域网络 77
3.3.3 辅助存储 78
3.3.4 商业系统摘要 78
3.4 编程接口 78
3.4.1 高性能计算程序设计语言 78
3.4.2 并行编程模式 80
3.5 软件环境 80
3.5.1 操作系统 80
3.5.2 资源管理 82
3.5.3 调试器 83
3.5.4 性能分析 84
3.5.5 可视化 85
3.6 基本使用方法 86
3.6.1 登录 86
3.6.2 用户空间和目录系统 87
3.6.3 包的配置和构建 92
3.6.4 编译器和编译 93
3.6.5 运行应用程序 94
3.7 本章小结及成果 94
3.8 练习 95
参考文献 95
第4章 基准测试程序 97
4.1 引言 97
4.2 HPC基准测试程序的关键属性 100
4.3 标准的HPC社区的基准测试程序 101
4.4 高度并行计算的Linpack 102
4.5 HPC挑战基准测试套件 104
4.6 高性能共轭梯度 106
4.7 NAS并行基准测试程序 110
4.8 Graph500 111
4.9 小型应用作为基准测试程序 115
4.10 本章小结及成果 116
4.11 练习 117
参考文献 118
第5章 资源管理的基础 119
5.1 资源管理 119
5.2 SLURM的基础 123
5.2.1 架构概述 123
5.2.2 工作负载的组织 124
5.2.3 SLURM调度 125
5.2.4 SLURM命令概要 127
5.2.5 SLURM作业脚本 141
5.2.6 SLURM速查表 146
5.3 便携式批量系统基础 147
5.3.1 PBS概述 147
5.3.2 PBS架构 148
5.3.3 PBS命令概要 148
5.3.4 PBS作业脚本 158
5.3.5 PBS速查表 160
5.4 本章小结及成果 161
5.5 练习 162
参考文献 163
第6章 对称多处理器架构 164
6.1 引言 164
6.2 架构概览 165
6.3 阿姆达定律 168
6.4 处理器核心的架构 171
6.4.1 执行流水线 172
6.4.2 指令级并行 173
6.4.3 分支预测 173
6.4.4 直通 174
6.4.5 保留站 174
6.4.6 多线程 174
6.5 存储层次 175
6.5.1 数据重用和局部性 175
6.5.2 存储层次结构 176
6.5.3 存储系统的性能 178
6.6 PCI总线 180
6.7 外部I/O接口 184
6.7.1 网络接口控制器 184
6.7.2 串行高级技术附件 185
6.7.3 JTAG 187
6.7.4 通用串行总线 189
6.8 本章小结及成果 190
6.9 练习 191
参考文献 192
第7章 OpenMP的基础 194
7.1 引言 194
7.2 OpenMP编程模型概览 195
7.2.1 线程并行 195
7.2.2 线程变量 197
7.2.3 运行时库与环境变量 197
7.3 并行线程和循环 199
7.3.1 并行线程 199
7.3.2 私有 200
7.3.3 并行“for”语句 200
7.3.4 块 206
7.4 同步 208
7.4.1 临界同步指令 208
7.4.2 master指令 209
7.4.3 barrier指令 210
7.4.4 single指令 210
7.5 归约 210
7.6 本章小结及成果 212
7.7 练习 213
参考文献 214
第8章 MPI的基础 215
8.1 引言 215
8.2 消息传递接口标准 216
8.3 消息传递接口的基本命令 217
8.3.1 mpi.h 217
8.3.2 MPI_Init 217
8.3.3 MPI_Finalize 218
8.3.4 消息传递接口例子—Hello World 218
8.4 通信器 219
8.4.1 size 220
8.4.2 rank 220
8.4.3 例子 221
8.5 点对点消息 222
8.5.1 MPI发送 222
8.5.2 消息传递接口的数据类型 222
8.5.3 MPI接收 223
8.5.4 例子 223
8.6 同步聚合 225
8.6.1 聚合调用概览 225
8.6.2 栅栏同步 225
8.6.3 例子 226
8.7 通信聚合 227
8.7.1 聚合数据移动 228
8.7.2 广播 230
8.7.3 分散 231
8.7.4 收集 233
8.7.5 全局收集 234
8.7.6 归约操作 235
8.7.7 全局到全局 238
8.8 非阻塞式点对点通信 240
8.9 用户自定义数据类型 242
8.10 本章小结及成果 243
8.11 练习 244
参考文献 244
第9章 并行算法 245
9.1 引言 245
9.2 分支-聚合 246
9.3 分治 247
9.4 管理者-工作者 249
9.5 易并行 250
9.6 光环交换 251
9.6.1 使用有限差分的平流方程 251
9.6.2 稀疏矩阵向量乘法 254
9.7 置换:佳能算法 256
9.8 任务数据流:广度优先搜索 261
9.9 本章小结及成果 263
9.10 练习 263
参考文献 264
第10章 库 265
10.1 引言 265
10.2 线性代数 267
10.2.1 基本线性代数子程序库 267
10.2.2 线性代数包 273
10.2.3 可扩展的线性代数包 275
10.2.4 GNU科学库 276
10.2.5 Supernodal LU 276
10.2.6 用于科学计算的便携式可扩展工具包 277
10.2.7 用于特征值问题计算的可扩展库 277
10.2.8 千万亿运算级的应用的特征值求解器 278
10.2.9 Hypre:可扩展的线性求解器和多重网格方法 278
10.2.10 用于线性代数的领域特定语言 278
10.3 偏微分方程 280
10.4 图算法 281
10.5 并行输入/输出 281
10.6 网格分解 288
10.7 可视化 289
10.8 并行化 289
10.9 信号处理 289
10.10 性能监控 290
10.11 本章小结及成果 290
10.12 练习 291
参考文献 292
第11章 操作系统 294
11.1 引言 294
11.2 操作系统结构和服务 296
11.2.1 系统组件 296
11.2.2 进程管理 296
11.2.3 内存管理 296
11.2.4 文件管理 296
11.2.5 I/O系统管理 297
11.2.6 辅助存储管理 297
11.3 进程管理 297
11.3.1 进程状态 298
11.3.2 进程控制块 299
11.3.3 进程管理活动 300
11.3.4 调度 301
11.4 线程 302
11.5 内存管理 304
11.5.1 虚拟内存 304
11.5.2 虚拟页地址 304
11.5.3 虚拟地址转换 305
11.6 本章小结及成果 306
11.7 练习 307
第12章 可视化 308
12.1 引言 308
12.2 基本的可视化概念 308
12.3 Gnuplot 310
12.4 Matplotlib 312
12.5 可视化工具包 316
12.6 ParaView 323
12.7 VisIt 323
12.8 本章小结及成果 324
12.9 练习 325
参考文献 325
第13章 性能监控 326
13.1 引言 326
13.2 时间测量 327
13.3 性能分析 333
13.3.1 应用分析的重要性 333
13.3.2 gperftools基础 334
13.4 监控硬件事件 339
13.4.1 perf 339
13.4.2 性能应用程序编程接口 344
13.5 集成的性能监控套件 347
13.6 分布式环境下的分析 350
13.7 本章小结及成果 356
13.8 练习 357
参考文献 358
第14章 调试 360
14.1 引言 360
14.2 工具 362
14.2.1 GNU调试器 362
14.2.2 Valgrind 370
14.2.3 商业版并行调试器 370
14.3 调试OpenMP示例:访问不受保护的共享变量 372
14.4 调试MPI示例:死锁 373
14.5 用于调试的编译器标志 378
14.6 帮助调试的系统监控器 379
14.7 本章小结及成果 381
14.8 练习 381
参考文献 385
第15章 加速器架构 386
15.1 引言 386
15.2 简史 388
15.2.1 协处理器 390
15.2.2 处理器I/O空间中的加速器 394
15.2.3 具备行业标准接口的加速器 395
15.3 图形处理单元简介 397
15.4 图形处理单元功能的进化 399
15.5 现代GPU体系结构 403
15.5.1 计算架构 403
15.5.2 内存实现 406
15.5.3 互连 407
15.5.4 可编程环境 408
15.6 异构系统架构 408
15.7 本章小结及成果 410
15.8 练习 410
参考文献 411
第16章 OpenACC的基础 412
16.1 引言 412
16.1.1 CUDA 413
16.1.2 OpenCL 414
16.1.3 C++ AMP 414
16.1.4 OpenACC 415
16.2 OpenACC编程概念 415
16.3 OpenACC库调用 417
16.4 OpenACC环境变量 419
16.5 OpenACC指令 420
16.5.1 并行构造 420
16.5.2 内核构造 422
16.5.3 数据管理 423
16.5.4 循环调度 427
16.5.5 变量的作用范围 429
16.5.6 原子性 430
16.6 本章小结及成果 431
16.7 练习 432
参考文献 433
第17章 大容量存储器 434
17.1 引言 434
17.2 存储器简史 437
17.3 存储设备技术 438
17.3.1 硬盘驱动器 438
17.3.2 固态硬盘存储器 444
17.3.3 磁带 449
17.3.4 光存储 451
17.4 集中存储 456
17.4.1 独立磁盘冗余阵列 456
17.4.2 存储区域网络 462
17.4.3 网络附加存储 463
17.4.4 三级存储器 464
17.5 本章小结及成果 465
17.6 练习 466
参考文献 466
第18章 文件系统 468
18.1 文件系统的角色和功能 468
18.2 POSIX文件接口的基础 472
18.2.1 文件访问的系统调用 472
18.2.2 缓冲文件I/O 476
18.3 网络文件系统 480
18.4 通用并行文件系统 483
18.5 Lustre文件系统 487
18.6 本章小结及成果 492
18.7 练习 493
参考文献 494
第19章 MapReduce 495
19.1 引言 495
19.2 映射和归约 495
19.2.1 单词计数 496
19.2.2 共享的邻居 497
19.2.3 K均值聚类 498
19.3 分布式计算 499
19.4 Hadoop 500
19.5 本章小结及成果 503
19.6 练习 504
参考文献 504
第20章 检查点技术 505
20.1 引言 505
20.2 系统级检查点 505
20.3 应用级检查点 511
20.4 本章小结及成果 515
20.5 练习 516
参考文献 516
第21章 下一步和未来发展 517
21.1 引言 517
21.2 扩展的并行编程模型 518
21.2.1 消息传递接口的进展 518
21.2.2 OpenMP的进展 518
21.2.3 MPI+X 519
21.3 扩展的高性能计算架构 519
21.3.1 世界上最快的机器 519
21.3.2 轻量级架构 519
21.3.3 现场可编程门阵列 520
21.4 E级计算 521
21.4.1 E级计算的挑战 522
21.4.2 从数学角度看E级的大小 523
21.4.3 加速方法 523
21.4.4 轻量级核心 523
21.5 异步多任务 524
21.5.1 多线程 524
21.5.2 消息驱动的计算 524
21.5.3 全局地址空间 525
21.5.4 行动者同步 526
21.5.5 运行时系统软件 526
21.6 新数字时代 526
21.6.1 数据流 527
21.6.2 元胞自动机 529
21.6.3 仿神经计算 530
21.6.4 量子计算 530
21.7 练习 531
参考文献 531
附录A C语言的基础 532
附录B Linux的基础 547

教学资源推荐
作者: 万珊珊 吕橙 郭志强 李敏杰 张昱 编著
作者: Steve Cunningham
作者: Michael Miller
参考读物推荐
作者: 章小莉等
作者: [英]S. 巴里·库珀(S. Barry Cooper) 安德鲁·霍奇斯(Andrew Hodges) 等著
作者: [美]戴维·埃文斯(David Evans),弗拉基米尔·科列斯尼科夫( Vladimir Kolesnikov),迈克·罗苏莱克(Mike Rosulek)著