高性能计算:现代系统与应用实践
基本信息

编辑推荐
戈登·贝尔亲笔作序,回顾并展望超算领域的发展之路
戈登·贝尔奖获得者及其团队撰写,打造多路径的高效学习曲线
入门级读物,全面涵盖重要的基础知识和实践技能
High Performance Computing
Modern Systems and Practices
高性能计算
现代系统与应用实践
托马斯·斯特林(Thomas Sterling)
[ 美 ] 马修·安德森(Matthew Anderson)著
马切伊·布罗多维茨(Maciej Brodowicz)
黄智濒 艾邦成 杨武兵 李秀桥 译
内容简介
目录
序言
前言
致谢
第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
前言
高性能计算(HPC)是一个多学科领域,结合了硬件技术和架构、操作系统、编程工具、软件以及最终用户问题和算法。为了有能力参与HPC活动,需要一些必要的概念、知识和技能,通常需要在相关机构进行学习,这些机构拥有专家、设施和任务目标,但这样的机构并不太多。无论一个人的目标是与特定的最终用户领域(如科学、工程、医学或商业应用)相关联,还是专注于使超级计算有效地支持系统技术和方法,入门级从业者必须紧密结合广泛的、清晰的且相互关联和依存的领域,而且需要了解其协同作用才能领悟这些专业知识。学习材料可能很容易就找到十几本书和手册,但即使它们组合在一起,也无法提供充分体现整个领域的必要视角,无法成为指导学生获得足够专业知识的有效途径。
本书旨在弥合无数狭隘的焦点问题来源与跨越和互连各种学科(构成HPC领域)的单一来源需求之间的差距。它是一本入门级读物,需要最少的预备知识,提供了对这些领域及其相互影响(使超级计算成为一个跨学科领域)的完整理解。从实践的角度来看,本书针对并行编程、调试、性能监控、系统资源使用和工具以及结果可视化等有用的技术来培养读者的特定技能。这些技能涉及的基础概念相对而言变化较小,而关于硬件和软件系统组件的详细属性的知识更有可能随着时间的推移而发展。
本书支持单学期课程,以便初学者为超级计算中的各种角色做好准备,实现他们所选择的职业目标。它适合致力于使用超级计算机来解决科学、工程或社会领域等应用需求的未来的计算科学家。它为系统设计人员和工程师提供硬件和软件的可能目标功能的基本描述。对于希望研究超级计算本身的研究人员,作为传统系统和实践的介绍性演示,以及作为这个激动人心的探索领域面临的挑战的代表,本书也是一本基础读物。本书同样适合那些为超级计算环境提供技术支持的人员,例如数据中心和系统管理员、操作员和管理人员。在提供给未来的专业人员时,本书可以以多种方式来使用。它可为超级计算提供基础信息,为课堂教学提供一系列讲座内容。它使用大量示例来说明实际操作方法,所有这些都可以在并行计算机上执行,以及在实践时指导学生进行练习。它通过易于学习的风格明确了技能组合和训练方法。概念以详细且易于理解的形式呈现,以揭示方法背后的“原因”,并根据基本事实、相关因素和敏感性协助未来用户进行决策。最后,本书在同一上下文中统一了与多个子学科相关的许多事实,这些子学科组合构成了超级计算领域。
本书的组织结构
本书可以满足读者最初的好奇心、兴趣和参与HPC活动所需技能要求,通过学习本书,可以最终搭建起知识、能力和熟练程度之间的桥梁。对于追求各种潜在专业路径的人来说,本书是一个起点,其中这些路径在先进系统的性质和用途方面具有共同的基础。无论读者是否最终能够搭建硬件或软件系统,他们都能使用此类系统作为追求科学、工程、商业或安全等其他领域的关键工具来进行研究,从而有助于设计和推动支持当前HPC发展的未来方法,或管理、经营和维护供其他用户使用的HPC系统。本书的各个章节构成了一个无缝的主题流,每个主题都可以从前导主题中受益,同时也为后续主题提供基础。因此,本书按HPC使用的早期基本技能的顺序讲解主要主题,即使有可能过早涉及需要深入理解这些复杂系统及其使用才能掌握的基础概念。必要时,书中会给出主题的介绍性描述,其中包含足够的信息以帮助读者了解其他相关的主题,但只在后面的章节中进行更深入的回顾。通过学习多样化的相互关联的主题领域,读者的理解力和能力可以逐步增强。
本书是关于计算性能的。对于当前和下一代系统,这意味着可以利用工作负载并行性来实现可扩展性和管理数据的方法,从而实现操作效率。下面列出了4个主要的总体主题领域。
系统硬件架构和支持技术。
编程模型、接口和方法。
系统软件环境、支持和工具。
并行算法和分布式数据结构。
基于逻辑流程,本书给出了一目了然的教学组织结构。但HPC还有另一个方面:组织与协调并行性和数据管理的替代策略,以及有助于每个组件层的角色。
本书介绍了4种主要策略。
作业流并行性、吞吐量或容量计算。
顺序进程的通信或消息传递。
多线程共享内存。
SIMD或图形处理单元(GPU)加速。
从教学角度来看,作者希望传达三种信息以促进学习过程,并希望也能让读者得到享受。基础层面是概念,建立对基本原则的理解以帮助学习HPC的形式和功能。接下来会介绍许多基本信息及文化(什么人、什么事情、什么时候),这些事实构成了必要的知识集合,提供了该领域的框架。最后讲授一些实践技能。诚然,这三个层面彼此并不交叉。在每种情况下,本书都将案例的所有材料以这三种形式之一的方式来呈现。例如,标题以“……的基础”结尾的章节(例如“OpenMP的基础”)被精心设计为具有教程演示风格的模块,以便简化学习。虽然概念和知识的混合是不可避免的,但是我们会单独强调其中的一项。这种区别的重要性在于,虽然关于这个快速发展的领域的大部分知识将会改变,甚至在某些情况下已经过时,但基本概念随着时间的推移而保持不变,即使某些特定机器或语言的细节可能变得无关紧要,但这些知识也将帮助读者加强对相关领域的长期理解。
本书首先根据4个独立的并行计算模型来组织章节,然后根据基本概念对每个模型展开讨论,重点关注支持它们的系统体系结构的相关知识,以及针对每类系统进行编程的相关技能。在准备本书内容时,一些初始材料(包括介绍性章节)构成了本书的基本前提和背景。4个并行计算模型中的每一个都是根据概念、知识细节和编程技巧来描述的。虽然本书涵盖了理解和编程HPC系统所需的大部分有用信息,但忽略了与环境和工具相关的一些交叉主题,这些主题也是系统完整上下文的一个重要甚至普遍的方面。但是,对这些主题的介绍超出了初学者学习的范围。毕竟,本书目的是为读者提供高效的工作能力,以便在专业工作场所利用超级计算机实现各种目的。因此,本书以有效的顺序给出了许多重要且有用的工具和使用方法。最后,读者可以清楚地了解HPC应用的广泛领域,并且在这个背景下选择贴合本书的主题。这可以用来指导未来的计划,以及根据读者的最终职业目标选择更高级的课程。本书的总体结构和流程总结如下。
Ⅰ.绪论和基本思想(第1~4章)
序言
掌握了这些不断增加且可扩展的并行计算机,读者将有机会进入相对较小但不断增长的技术精英阶层,这是本书的目标。为了避免读者误认为这个名称并不重要,我们举例说明: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月
媒体评论
——戈登·贝尔(同名的戈登·贝尔奖是高性能应用领域的最高奖项)
高性能计算涉及硬件架构、操作系统、编程工具和软件算法等跨学科的知识,学习曲线较长。本书从中提炼出核心知识及技能,为初学者构建了一条易于理解的学习路径,夯实基础的同时注重培养实战能力。
书中首先介绍基础知识,包括执行模型、体系结构、性能度量、商品集群等;接着讲解吞吐量计算、共享内存计算、消息传递计算和加速GPU计算,围绕这些模型的概念、细节及编程实践展开讨论;然后引导读者构建应用程序,涵盖并行算法、库、可视化及性能优化等;最后,考虑真实系统环境,讨论了操作系统、大容量存储、文件系统及MapReduce算法等。书中通过大量示例来说明实际操作方法,这些均可在并行计算机上执行,以帮助读者更好地理解方法背后的原因。
推荐阅读方式
本书提供了多种学习路径,建议读者按照自己的需求进行学习:
·全面式阅读。从头到尾的细读将帮助你获得全面且深入的理解。所有章节都经过精心组织,知识结构层层递进。
·指南式阅读。挑选以“……的基础”为标题的章节,作为一本快捷知识指南或教程,所要求的预备知识最少。
·精选式阅读。根据自己的需求,精读关键章节,如从四种并行计算模型中进行挑选,或在学习基本的作业流并行时专注于SLURM或PBS。