1.1 超级计算机简史
超级计算,也称为超算或高性能计算(High Performance Computing,HPC),是指能够运行一般个人计算机或普通计算机无法处理的高速运算。实现超级计算的超级计算机的性能比普通计算机强大许多。
目前,超级计算机在科学计算领域扮演着重要角色,被广泛用于大密度任务的计算中,如量子力学、天气预报、气象学研究、地球物理、石油勘探、生物医药科学、物理仿真模拟等领域的计算工作。
1960年,美国基于利弗摩尔原子研究计算机(LARC)建造出UNIVAC,它被认为是第一代超级计算机。当时,UNIVAC使用的存储是高速磁鼓而不是磁盘驱动技术。
同属第一代超级计算机的还有IBM 7030。1955年,美国核物理洛斯阿拉莫斯国家实验室提出,需要比当时的计算机快100倍的计算机以用于相关的研究工作。于是,IBM研制出IBM 7030以满足这个需求。IBM 7030使用晶体管、磁芯存储器和流水线指令,通过存储器、控制器读取数据。在这个过程中,开创性地使用了随机存取磁盘驱动器。
IBM 7030于1961年完工,尽管没有实现性能增长百倍的目标,但仍被洛斯阿拉莫斯国家验室购买,英国和法国的客户也购买了这款超级计算机。IBM 7030成为后来用于密码分析的超级计算机IBM 7950 Harvest的基础。
20世纪60年代初的第三个开创性超级计算机项目是英国曼彻斯特大学的Atlas,该项目由Tom Kilburn领导的团队完成。Atlas原打算实现高达48位100万字的存储空间,但由于这种容量的磁存储器成本高昂,因此Atlas的实际核心内存只有16 000字,磁鼓提供了96 000字的存储空间。Atlas的操作系统在磁芯和磁鼓之间以页的形式交换数据。Atlas操作系统还将分时技术引入超级计算机,使超级计算机可以在任何时候执行多个程序。Atlas的处理速度接近每一条指令用时一微秒,大约每秒可处理一百万条指令。
1964年,由西摩·克雷设计的CDC 6600完工(如图1.1所示),这标志着超级计算机的元器件介质由锗向硅晶体管转变。硅晶体管的运行速度更快,散热问题则是通过引入制冷技术来解决的。CDC 6600的性能比当时的计算机快大约10倍,并定义了超级计算机市场。这款超级计算机生产了一百台,并以每台800万美元的价格售出。
图1.1 早期的超级计算机CDC 6600
1972年,克雷离开CDC,成立了自己的公司——克雷研究。4年后,克雷发布了主频为80 MHz的Cray-1(如图1.2所示),它成为历史上成功的超级计算机之一。Cray-2于1985年发布,它有8个中央处理器(CPU),采用液体冷却的方法,将冷却剂泵过超级计算机元器件达到冷却目的。Cray的运行速度为每秒1.9千兆次,是继莫斯科M-13超级计算机之后运行速度位居第二的计算机。
图1.2 保存在德国博物馆的超级计算机Cray-1
20世纪70年代,唯一一款可以挑战Cray-1性能的计算机是ILLICIV。这是第一个真正意义上实现大规模并行处理(Massively Parallel Processing,MPP)的机器,其中许多处理器一起工作,以解决一个大样本空间问题的不同部分。与Cray超级计算机以向量计算系统来运行单一的数据流不同,MPP计算机读取数据的不同部分进行处理,然后重新组合结果的不同部分(这是典型的Fork&Join程序结构)。ILLIAC的设计于1966年完成,它拥有256个处理器,能提供高达1 GFLOPS的速度,而当时Cray-1的峰值为250 MFLOPS。然而,ILLIAC在开发中遇到了问题,只有64个处理器能够工作,导致系统永远达不到200 MFLOPS的运行速度,同时系统比Cray规模更大、更复杂。另一个问题是,为系统编写软件非常困难,因此难以获得最高的性能。
尽管ILIACIV没有达成目标,但是其采用的分布式计算架构为超级计算的发展指明了方向。然而,Cray并不认同这种说法,他曾讽刺说“如果你要耕地,你会选两头壮牛还是1024只鸡?”到了20世纪80年代初,已有多个团队开始研究具有数千个处理器的并行设计,特别值得一提的是由麻省理工学院研究和开发的连接机(Connection Machine,CM)。CM-1将多达65 536个简化的自定义微处理器连接在一起,用一个网络来共享数据。之后还出现了多个升级版本,比如CM-5是一个大规模并行处理计算机,每秒能进行数十亿次算术运算。
1982年,日本大阪大学研发了LINKS-1,这款超级计算机主要用于绘制逼真的三维计算机图形。LINKS-1采用了大规模并行处理架构,拥有514个微处理器,包括257个Zi log Z8001控制处理器和257个i APX 86/20浮点处理器。
富士通于1992年建造了VPP 500。为了实现更高的速度,其处理器使用了砷化镓材料(该材料有毒性,通常在微波领域应用)。1994年,富士通的数字风洞超级计算机使用了166个向量处理器,以1.7 GFLOPS的峰值速度成为世界排名第一的超级计算机。1996年,日立开发了SR2201,它使用2048个处理器,通过快速三维交叉网络连接,达到600 GFLOPS的峰值速度。
1993年,英特尔的Paragon通过配置1000~4000个英特尔i860处理器达到当时世界最高的峰值速度。Paragon是一个MIMD(多指令流多数据流)计算机,通过高速的二维网格连接处理器,进程可以在单独的节点上执行,通过消息传递接口进行通信。
虽然超级计算机发展迅速,但软件开发仍然是一个难题。CM系列引发了对软件问题的大量研究。一开始,许多公司采用定制化硬件来构造超级计算机,比如Evans & Sutherland ES-1、MasPar、nCUBE、Intel iPSC和Goodyear都是采用定制化处理器,这些定制化处理器显然对软件开发不利。到了20世纪90年代中期,随着通用CPU的性能提升,一般超级计算机都采用通用CPU作为单独的处理单元,而不是使用定制化芯片,这为开发通用的高性能计算软件带来了巨大的方便。到了21世纪初期,采用数万个通用CPU构建超级计算机成为常态,后来又加入通用图形处理器(GPU)来进行加速。
建设有大量处理器的系统通常采用两种方式。第一种方式是网格计算方法,通过广域网和互联网将分布的计算机资源和处理能力组织起来,灵活地协同完成一个任务。第二种方式是在局域网中将许多彼此相邻的处理器连接起来,形成计算机集群。在集中式的大规模并行系统中,高速低延迟网络变得非常重要,现代超级计算机一般使用增强的InfiniBand或三维环面互连来实现高速低延迟网络。将多核处理器集中管理使用是一个新兴的方向,例如Cyclops 64系统中就采用了这种方式。
随着GPU的价格不断下降、性能和能效不断提高,我国的天河一号、星云等P级超级计算机已经采用GPU加速卡。GPU在加速比上有很强的优势,但是这需要应用软件的适配和调试才能发挥更大的作用,因此需要工程师花大量的时间来调整应用程序。好消息是,市场正在逐步接受GPU,2012年,捷豹超级计算机通过大量将CPU替换成GPU成就了天河系超级计算机。
一般高性能计算机的预期运行生命周期约为3~5年,然后就需要升级改造。Gyoukou(晓光)超级计算机由日本海洋地球科学和技术机构联合拥有,其独特之处在于同时采用了大规模并行设计和液体浸入式冷却技术。
研究人员还设计了许多特殊用途的系统用于专门解决某一类问题。比如,使用专门的可编程的CPU FPGA芯片,甚至定制的ASIC,通过牺牲通用性来达到更高的性价比。特殊用途的超级计算机包括贝尔(计算机象棋冠军)、深蓝,用于对弈的Hydra,用于天体物理学的Gravity Pipe,为蛋白质结构计算分子动力学的MDGRAPE-3以及用于破解DES密码的eep Crack。
从图1.3可以看出,超级计算机最初采用的架构和技术很宽泛,但是后来共享CPU的x86架构集群占据了主导地位,这要归功于芯片的摩尔定律和x86、Linux操作系统的普及。
图1.3 共享CPU的TOP500
对应于不同的用途,各种超级计算机所采用的技术架构、系统设计、性能评测标准都不一样。为了能有一个统一的标准来衡量超级计算机的性能指标,1993年成立了国际TOP500组织。该组织主要对高性能计算机进行相关统计,每半年对世界上各个超级计算机用Linpack程序进行一次基准测试,将排名前500的系统在世界TOP500排行榜网站上公布。TOP500代表着世界上500台运行速度最快的超级计算机。任何单位和组织的超级计算机要想进入TOP500名单,必须运行一个标准的HPC性能测试程序并将测试结果提交给TOP500组织。
这里要解释两点:首先,超级计算机的性能测试由Linpack来完成,Linpack非常适合集群架构的超级计算机,然而不是所有的超级计算机都采用集群架构。其次,由于多种原因,有些超级计算机不想参加TOP500的排名。所以严格来说,TOP500名单中是那些愿意参与排名的前500位超级计算机。