基本信息

编辑推荐
---------------------------高性能计算:现代系统与应用实践---------------------------
戈登·贝尔亲笔作序,回顾并展望超算领域的发展之路
戈登·贝尔奖获得者及其团队撰写,打造多路径的高效学习曲线
入门级读物,全面涵盖重要的基础知识和实践技能
High Performance Computing
Modern Systems and Practices
高性能计算
现代系统与应用实践
托马斯·斯特林(Thomas Sterling)
[ 美 ] 马修·安德森(Matthew Anderson)著
马切伊·布罗多维茨(Maciej Brodowicz)
黄智濒 艾邦成 杨武兵 李秀桥 译
内容简介
计算机书籍
---------------------------高性能计算:现代系统与应用实践---------------------------
本书内容全面且易学易懂,不仅涵盖高性能计算的基础概念和知识点,同时重视核心技能的培养。通过阅读本书:资深研究者将学习如何将超级计算机作为寻求新知识的重要工具;新手工程师将体验超级计算机如何运用高性能计算系统和方法来设计和模拟创新产品;学生将会了解未来高性能计算研究和开发的可能方向,为职业生涯做好准备;商用集群的维护和管理者将在掌握高性能计算系统的功能的基础上,学习如何更好地使用它们。
---------------------------高性能计算的问题解决之道:Linux态势感知方法、实用工具及实践技巧---------------------------
本书由Intel架构师撰写,创造性地采用Linux态势感知方法来解决高性能计算的问题,涵盖技术、监控和配置管理等多个方面。书中针对大规模数据中心、云平台架构和高性能计算环境,建立了一套基于统计工程和实验设计的方法论,从识别问题和理解问题,到再现问题和解决问题,一步一步地排除故障,形成了一套高效的工作流程。书中包含大量实战案例和代码,并介绍了不同工具的使用技巧,适合从事高性能计算相关工作的技术人员和管理人员参考。
目录
---------------------------高性能计算:现代系统与应用实践---------------------------
译者序
序言
前言
致谢
第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
译者序
---------------------------高性能计算的问题解决之道:Linux态势感知方法、实用工具及实践技巧---------------------------
高性能计算已成为继理论科学和实验科学之后科学研究的第三大支柱,越来越多的科学发现和工程设计成果都依赖于高性能计算系统。高性能计算已经全面应用到国家安全、政府决策、科学研究、工业设计等诸多层面,典型应用包括生物工程、新药研制、石油物探、运载器设计(航空航天、舰船、汽车)、材料工程、核爆模拟、尖端武器制造、密码研究和各类大规模信息处理等。各国正在积极研制的E级(每秒百亿亿次)计算系统有望在2020~2022年出现。近几年来,以电子商务、微信为代表的互联网服务使得万众受益,大规模系统是这些服务的核心基础设施,而系统平均无故障时间(Mean Time To Failure,MTTF)则会随节点数增加而显著降低。互联网服务系统往往包含数以千计的磁盘和服务器,在这种情况下,即便不计成本地使用MTTF达到4年的设备,在一个拥有1000个节点的集群中,也会每周发生近5次故障。若适当考虑成本因素而采用MTTF为两年的设备,每周的故障次数将达到近10次。故障停机对互联网服务企业直接意味着巨额损失,大规模IT系统需要更好的设计和管理来处理更频繁的故障。
工欲善其事,必先利其器。基于Linux态势感知方法来解决高性能计算的问题,是本书的一个创造性尝试。正如作者所说,在解决大系统问题时,没有通盘战略,你可能会编写一些脚本或者花很长时间盯着日志在屏幕上滚动,你可能会绘制图表来显示数据趋势,你可能会向同事请教他们领域的问题,你可能会参与或领导特别工作组试图解决危急问题或恢复供电,但在最后,就像拼图一样,没有一个统一的方法能解决所有的问题。在诸如大型数据中心、云平台架构和高性能的环境中,大型部署管理是一项非常微妙的任务,它需要大量的经验、努力和对技术的理解来创造一个成功而高效的工作流程。所谓态势感知的问题解决方法,是借鉴自科学领域的一种方法,试图用数学来代替人的直觉,使用统计工程和实验设计以对抗混乱,系统地、循序渐进地工作,努力找到一种统一的方法用于解决同类问题。作者分享了多年来为基于英特尔的系统开发解决方案的经验,即如何在涉及数千台服务器、数十万个核、分布式数据中心和PB级共享数据的环境下排除故障,他的经验涵盖全栈,从识别问题、理解问题到再现问题,再到使用系统化的自上而下的方法来解决问题。自始至终,本书提供了独特的实践中的例子,强调了高性能计算机系统的规模和操作复杂性。
本书共11章。前6章主要介绍在解决高性能计算问题方面遇到的一些纯技术性问题,后5章侧重于扩展技能和理解,介绍一种完整的整体态势感知方法,深入数学模型和最佳实践,以及监控和配置管理,这使我们更有信心应对新的挑战。
第1章介绍了一种可以说是在数据中心应该如何解决问题的近乎方法论的观点。
第2章讨论解决问题和研究的基本方法,专门介绍在研究中可能会遇到的一些常见的陷阱。
第3章围绕着解决问题使用的一些常见应用程序和工具,比如ps、top、vmstat、iostat等,建立起报告的症状与软硬件资源的实际行为之间的联系。
第4章讲述进程空间和内核,为了使用工具来揭示任务结构和操作系统本身,我们需要对底层构建模块有更深入的了解。
第5章专注于深入分析和刻画(profile)应用程序,以及分析内核本身,通过使用不同的工具为问题创建一个更完整的多维画面,并提出相关的解决方案。
第6章进一步讨论内核崩溃分析和内核调试器的使用。包含研究过程中最复杂的部分,从Kdump实用程序的设置开始,然后是深入的内核崩溃分析,最后是kdb工具的简要概述。
第7章关于问题的解决形成了一个具有多层工具和实践的完整原则。首先以实用的方式组织数据,然后与供应商和行业进行内部和外部接洽。随着问题的解决,一个复杂的周期(包括测试、验证和分阶段实施)将在几个关键组件上帮助你做出正确的决定。
第8章详细阐述了建立稳健有效的监测环境的考虑因素、方法和工具。解决问题的下一个步骤是确保我们能在数据中发现规律,将它们关联到产生数据的源代码,并试图在第一时间阻止问题出现。
第9章介绍环境变化和控制环境的后续过程。我们的关键工具是版本控制和配置管理软件。
第10章通过几个实际的例子说明如何在合适的时候做出必要的调整,调整环境与需求相匹配,并提供必要的操作灵活性,从而避免之后不得不工作在“救火”模式。
第11章总结全书,通过解决问题、在研究中使用系统化的方法,尝试避免工作过程中的经典错误和陷阱。
前言
---------------------------高性能计算:现代系统与应用实践---------------------------
本书的目的
高性能计算(HPC)是一个多学科领域,结合了硬件技术和架构、操作系统、编程工具、软件以及最终用户问题和算法。为了有能力参与HPC活动,需要一些必要的概念、知识和技能,通常需要在相关机构进行学习,这些机构拥有专家、设施和任务目标,但这样的机构并不太多。无论一个人的目标是与特定的最终用户领域(如科学、工程、医学或商业应用)相关联,还是专注于使超级计算有效地支持系统技术和方法,入门级从业者必须紧密结合广泛的、清晰的且相互关联和依存的领域,而且需要了解其协同作用才能领悟这些专业知识。学习材料可能很容易就找到十几本书和手册,但即使它们组合在一起,也无法提供充分体现整个领域的必要视角,无法成为指导学生获得足够专业知识的有效途径。
本书旨在弥合无数狭隘的焦点问题来源与跨越和互连各种学科(构成HPC领域)的单一来源需求之间的差距。它是一本入门级读物,需要最少的预备知识,提供了对这些领域及其相互影响(使超级计算成为一个跨学科领域)的完整理解。从实践的角度来看,本书针对并行编程、调试、性能监控、系统资源使用和工具以及结果可视化等有用的技术来培养读者的特定技能。这些技能涉及的基础概念相对而言变化较小,而关于硬件和软件系统组件的详细属性的知识更有可能随着时间的推移而发展。
本书支持单学期课程,以便初学者为超级计算中的各种角色做好准备,实现他们所选择的职业目标。它适合致力于使用超级计算机来解决科学、工程或社会领域等应用需求的未来的计算科学家。它为系统设计人员和工程师提供硬件和软件的可能目标功能的基本描述。对于希望研究超级计算本身的研究人员,作为传统系统和实践的介绍性演示,以及作为这个激动人心的探索领域面临的挑战的代表,本书也是一本基础读物。本书同样适合那些为超级计算环境提供技术支持的人员,例如数据中心和系统管理员、操作员和管理人员。在提供给未来的专业人员时,本书可以以多种方式来使用。它可为超级计算提供基础信息,为课堂教学提供一系列讲座内容。它使用大量示例来说明实际操作方法,所有这些都可以在并行计算机上执行,以及在实践时指导学生进行练习。它通过易于学习的风格明确了技能组合和训练方法。概念以详细且易于理解的形式呈现,以揭示方法背后的“原因”,并根据基本事实、相关因素和敏感性协助未来用户进行决策。最后,本书在同一上下文中统一了与多个子学科相关的许多事实,这些子学科组合构成了超级计算领域。
本书的组织结构
本书可以满足读者最初的好奇心、兴趣和参与HPC活动所需技能要求,通过学习本书,可以最终搭建起知识、能力和熟练程度之间的桥梁。对于追求各种潜在专业路径的人来说,本书是一个起点,其中这些路径在先进系统的性质和用途方面具有共同的基础。无论读者是否最终能够搭建硬件或软件系统,他们都能使用此类系统作为追求科学、工程、商业或安全等其他领域的关键工具来进行研究,从而有助于设计和推动支持当前HPC发展的未来方法,或管理、经营和维护供其他用户使用的HPC系统。本书的各个章节构成了一个无缝的主题流,每个主题都可以从前导主题中受益,同时也为后续主题提供基础。因此,本书按HPC使用的早期基本技能的顺序讲解主要主题,即使有可能过早涉及需要深入理解这些复杂系统及其使用才能掌握的基础概念。必要时,书中会给出主题的介绍性描述,其中包含足够的信息以帮助读者了解其他相关的主题,但只在后面的章节中进行更深入的回顾。通过学习多样化的相互关联的主题领域,读者的理解力和能力可以逐步增强。
本书是关于计算性能的。对于当前和下一代系统,这意味着可以利用工作负载并行性来实现可扩展性和管理数据的方法,从而实现操作效率。下面列出了4个主要的总体主题领域。
系统硬件架构和支持技术。
编程模型、接口和方法。
系统软件环境、支持和工具。
并行算法和分布式数据结构。
基于逻辑流程,本书给出了一目了然的教学组织结构。但HPC还有另一个方面:组织与协调并行性和数据管理的替代策略,以及有助于每个组件层的角色。
本书介绍了4种主要策略。
作业流并行性、吞吐量或容量计算。
序言
---------------------------高性能计算:现代系统与应用实践---------------------------
高性能计算是贝克尔和斯特林于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月
媒体评论
---------------------------高性能计算:现代系统与应用实践---------------------------
本书是掌握超级计算的重要指南和参考。它填补了培训领域科学家和工程师,特别是计算机科学家的学术课程中的重要缺失环节。
——戈登·贝尔(同名的戈登·贝尔奖是高性能应用领域的最高奖项)
高性能计算涉及硬件架构、操作系统、编程工具和软件算法等跨学科的知识,学习曲线较长。本书从中提炼出核心知识及技能,为初学者构建了一条易于理解的学习路径,夯实基础的同时注重培养实战能力。
书中首先介绍基础知识,包括执行模型、体系结构、性能度量、商品集群等;接着讲解吞吐量计算、共享内存计算、消息传递计算和加速GPU计算,围绕这些模型的概念、细节及编程实践展开讨论;然后引导读者构建应用程序,涵盖并行算法、库、可视化及性能优化等;最后,考虑真实系统环境,讨论了操作系统、大容量存储、文件系统及MapReduce算法等。书中通过大量示例来说明实际操作方法,这些均可在并行计算机上执行,以帮助读者更好地理解方法背后的原因。
推荐阅读方式
本书提供了多种学习路径,建议读者按照自己的需求进行学习:
·全面式阅读。从头到尾的细读将帮助你获得全面且深入的理解。所有章节都经过精心组织,知识结构层层递进。
·指南式阅读。挑选以“……的基础”为标题的章节,作为一本快捷知识指南或教程,所要求的预备知识最少。
·精选式阅读。根据自己的需求,精读关键章节,如从四种并行计算模型中进行挑选,或在学习基本的作业流并行时专注于SLURM或PBS。