第1章高性能计算机概述
随着时代进步,计算科学已成为与理论科学和实验科学并驾齐驱的现代科学方法,大规模科学计算的能力已经成为当前解决大量科学与工程问题的必备能力,是一种推动现代科学发展的重要手段。对于理论模型过于复杂甚至模型难以建立、开展真实实验困难,或者实验费用过于昂贵的问题,计算已成为求解的唯一手段。其中,高性能计算(High-Performance Computing,HPC)是一种利用高性能计算机或计算机集群的能力来求解需要大量计算的复杂科学和工程问题的技术。
1.1基本概念
在本节中,首先介绍一些和高性能计算机相关的基本概念,如计算机性能、高性能计算机、并行计算等。
1.1.1计算机性能
对于一个计算机系统,其性能*本质的定义是“完成一个任务所需要的时间”。一般来说,在一个计算机系统上完成一个任务所需要的时间,通常可以由任务完成需要执行的指令数、每条指令执行所需要的时钟周期以及每个时钟周期的时间长度等三个量的乘积来计算得到。
为了简化对于不同计算机的横向比较,一个常用的计算机性能评价指标是每秒百万条指令(Million Instructions Per Second,MIPS)。通过提高处理器主频(即时钟频率)和每个时钟周期执行的指令数,可以快速提高某台计算机的MIPS指标。但是MIPS指标忽略了不同指令系统之间的差异,有的指令系统比较复杂,有的指令系统比较简单,执行每条指令所需要的时钟周期也不尽相同,因此MIPS指标不能恰当反映具有不同指令系统的计算机之间的性能差异。
由于MIPS指标的缺陷,来自美国劳伦斯利弗莫尔国家实验室的弗兰克 H 麦克马洪(Frank H.McMahon)提出了更通用的计算机性能评价指标,即每秒浮点运算次数(Floating-Point Operations Per Second,FLOPS)。这里,浮点(Floating-Point)指带有小数的数值类型,浮点运算指小数的四则运算(加减乘除)。由于FLOPS评价的是计算机每秒产生的浮点运算结果数,而不是执行的具体指令数,因此可以更加公平地对不同体系结构、不同指令系统的计算机进行比较。
浮点数的表示一般遵循ANSI/IEEEStd754-1985定义的标准格式,使用可浮动的小数点定义不同长度的二进制数字。与定点数不同,基于同样长度的二进制数字,浮点数能够表达更大的数值范围。然而,虽然表达的数值范围扩大了,但浮点数的表达精度有限,难以精确表达所有实数,只能近似表达不同精度。
按照精度的不同,浮点数可以划分为双精度浮点数、单精度浮点数、半精度浮点数,如图1-1所示,其中,双精度浮点数(FP64)使用64位(即8字节)表示,包括1位符号位、11位指数位、52位尾数位;单精度浮点数(FP32)使用32位(即4字节)表示,包括1位符号位、8位指数位和23位尾数位。英伟达(NVIDIA)公司在2002年又提出了半精度浮点数(FP16),其共使用16位(即2字节)表示,包括1位符号位、5位指数位和10位尾数位。
浮点数的位数越多,精度就越高,从而可以在更大范围内表示数值的变化,实现更精确的计算。高性能计算领域应用的计算精度要求非常高,通常采用双精度浮点数进行数值表示。而对于多媒体或图像处理等应用,一般采用单精度浮点数进行数值表示与计算。对于精度要求更低的深度学习等人工智能应用,采用半精度浮点数也可以满足要求。
LINPACK是目前测试高性能计算机系统浮点运算性能*常用的基准评测程序之一。LINPACK通过采用高斯消元法求解稠密线性代数方程组,以此来评测高性能计算机系统的浮点运算性能,主要评测计算机系统的双精度浮点运算性能,评测结果以FLOPS为单位来表示。
为了方便表示,基于FLOPS,延伸出来一系列扩展指标,包括:
(1)每秒百万次浮点运算(MegaFloating-Point Operations Per Second,MFLOPS,megaFLOPS,MFlop/s);
(2)每秒十亿次浮点运算(GigaFloating-Point Operations Per Second,GFLOPS,gigaFLOPS,GFlop/s);
(3)每秒万亿次浮点运算(TeraFloating-Point Operations Per Second,TFLOPS,teraFLOPS,TFlop/s);
(4)每秒千万亿次浮点运算(PetaFloating-Point Operations Per Second,PFLOPS,petaFLOPS,PFlop/s);
(5)每秒百亿亿次浮点运算(Exa Floating-Point Operations Per Second,EFLOPS,exaFLOPS,EFlop/s);
除了计算性能,可靠性、利用率、能耗、I/O性能、易用性、可编程性等也是重要的系统评价指标。在第2章中,将详细介绍评测高性能计算机的各种类型的基准评测程序。
1.1.2高性能计算机的定义
髙性能计算机(又称为超级计算机或超算)可以帮助人类解决本体的智力、体力和意志等难以解决的难题。在过去的40年中,高性能计算机帮助人类在科学计算方面向更微观的世界不断深入,向更宏观的世界拓展,向更极端的条件探索发展。高性能计算机帮助人类更好地了解大自然的奥妙,极大地解放了人类的生活,有效地助力了人类的发展。
高性能计算机有一个非常明显的特点,就是时代性。每一时代有每一时代的高性能计算机,它是那个时代性能*高的系统,例如,对于40年以前的高性能计算机,它的性能甚至都比不上现在的智能手机,而20年以前的高性能计算机的性能可能只与现今的笔记本电脑性能类似,其时代特性非常鲜明。高性能计算机不仅仅服务用户,作为一种战略前沿性技术,它还为国家的战略目标服务,是国家创新体系中不可或缺的重要部分。
高性能计算机运算具备以下优势与特征:运算速度超级快,存储容量超级大,计算系统超级可靠,在处理大量数据以及执行复杂计算任务时超级高效。例如,在科学计算领域,问题的求解涉及大量浮点运算,因此高性能计算机的运算速度常用每秒浮点运算次数(FLOPS)来评价,即该计算机每秒所执行的浮点运算次数。目前世界上*先进的高性能计算机是“富岳”(Fugaku),它是由日本理化学研宄所和制造商富士通株式会社共同推进开发的。该计算机共有7630848核,峰值性能可达到537212TFLOPS。如果地球上每个人1s做一次运算,那么“富岳”髙性能计算机1s的计算量相当于全世界所有人不眠不休两年的运算量。另外,高性能计算机通常都具有非常大的存储能力,例如,我国自主研发的“天河二号”高性能计算机总内存(又称主存)容量约为3.4PB,相当于超过30000台*先进的个人计算机的内存容量(128GB)相加的结果。此外,它的全局存储容量约19PB,接近20000个1TB硬盘的存储容量之和。
在高性能计算机的发展过程中,高性能计算机的应用范围已扩展至更广泛的领域,为国民经济建设、科学技术进步和人类的社会发展贡献力量,作为创新型国家的一种重大基础设施,高性能计算机能为解决挑战性问题提供重大支撑平台,助力并支撑着产业创新发展,为信息化建设提供了有力的资源保障。
自从1964年第一台真正意义上的高性能计算机CDC6600诞生以来,高性能计算机的性能飞速提升。1997年,英特尔(Intel)公司的ASCIRed超级计算机成为世界上第一台运算速度超过1TFLOPS(每秒万亿次浮点运算)的超级计算机,是12年前发布的Cray-2超级计算机性能的800倍。2008年,IBM公司的Roadrunner超级计算机成为世界上第一台运算速度超过1PFLOPS(每秒千万亿次浮点运算)的超级计算机,其速度是ASCIRed的约1000倍。现今*快的超级计算机已经超越E级(EFLOPS,每秒百亿亿次浮点运算)。美国花费6亿美元研发的Frontier超级计算机的设计计算性能为1.5EFLOPS,成为美国首台E级超级计算机。2022年5月,Rxmtier获得超级计算机运算速度全球排名第一。据LINPACK基准评测,Frontier计算集群达到了1.1EFLOPS的实测峰值性能。
整体而言,近30年高性能计算机的性能提升基本符合千倍定律,即每十年性能大约提升1000倍。从TOP500排行榜(图1-2)中高性能计算机的性能提升曲线可以清楚地观察到这一发展趋势。
1.1.3并行计算
1965年4月,英特尔公司的创始人之一戈登 摩尔(Gordon Moore)提出了著名的摩尔定律(Moore’sLaw),预言半导体芯片上集成的晶体管和电阻数目将每年增加一倍。1975年,戈登 摩尔依据实际情况,对摩尔定律进行了修正,将定律中“每年增加一倍”的描述更改为“每两年增加一倍”。随着时间的推移,目前主流的版本是集成电路上可容纳的晶体管数目,约每隔18个月便增加一倍。从20世纪70年代开始,到20世纪末,整个半导体行业的发展基本符合摩尔定律的预言,随着制程技术的进步,集成电路技术每隔18个月推进一代。
在2004年以前,通过提高晶体管集成度、提升时钟频率、应用指令级并行等方法来提升单核处理器性能是微处理器发展的主流。例如,早期计算机的中央处理器(CPU)的时钟频率只有1MHz,而后期的普通个人计算机处理器的时钟频率都能达到2GHz甚至更高,这比早期计算机的处理器时钟频率快了超过2000倍。但是进入21世纪,半导体工艺升级的速度明显放缓,从之前的1~2年升级一代放慢到3~5年升级一代,而且工艺优化对于提升芯片性能的可能性也在大幅降低。同时,芯片设计面临“功耗墙”问题,提高芯片的电压和主频,将会导致功耗随着主频的提高超线性增长。应用指令级并行也会导致芯片的功率密度(即每单位管芯面积消耗的功率)快速上升,继续提升功率密度会使得芯片的温度达到火箭喷口甚至太阳表面的温度。
在2004年,由于无法解决散热和功耗问题,英特尔公司宣布取消4GHz版本的PentiumIV处理器的开发,这也标志着单核处理器时代的结束,2005年之后,多核处理器的研发成为主流。通过使用多核处理器,计算机的性能不再受限于单个处理器核的性能,因此即使单处理器核的时钟频率无法再提高,也能通过添加处理器的核数来继续提高计算机性能。正因如此,多核并行的解决方案成为主流,现在无论个人计算机还是智能手机,都普遍采用了多核处理器。
并行计算通常是指把一个大规模的计算问题划分为若干规模较小的部分,然后可以在多个互连的处理器上同时进行求解的计算模式。并行计算存在多种不同的表现形态,主要包括位级并行、指令级并行、数据级并行、任务级并行等。早期的高性能计算机很多是采用向量处理器来提高性能的,属于数据级并行的一种;20世纪80年代初期,业界转向构建大规模并行计算系统,将大量普通处理器进行互连来提供并行计算能力,提供任务级并行。
图1-3给出了一个示例来表达任务级并行和数据级并行的区别。假设一个数据集有15个元素,需要进行3个步骤的处理,分别对应于任务1、任务2和任务3。对于任务级并行,可以把所有15个元素分发给3个执行节点,各个节点分别并行执行任务1、任务2和任务3之后把执行结果进行汇总。对于数据级并行,可以把数据集切分为三份,每份数据包含5个元素,然后把每份数据分发给一个节点执行处理任务,这样可以并行处理不同数据,每个节点顺序执行完任务1、任务2和任务3后,再对结果进行汇总。
并行计算虽然很早就在高性能计算领域得到应用,但是在“功耗墙”问题导致CPU时钟频率无法进一步提升后,获得了更为广泛的关注和重视。并行计算(尤其多核并行计算)已经成为目前的主流计算机体系结构,也是通往超级计算的唯一途径。在图1-4中可以看出
展开