超级计算机:隐藏在我们身边的庞然大物

  超级计算机,指能够执行一般个人电脑无法处理的大资料量与高速运算的电脑,其基本组成组件与个人电脑的概念无太大差异,但规格与性能则强大许多。现有的超级计算机运算速度大都可以达到每秒一兆(万亿,非百万)次以上。“超级计算机”(Supercomputing)这名词第一次出现是在媒体“纽约世界报”于1929年关于IBM为哥伦比亚大学建造大型报表机(tabulator)的报导。

  1960年代,超级计算机由希穆尔·克雷(Seymour Cray)在Control Data Corporation里设计出来并领先市场直到1970年代克雷创立自己的公司──克雷研究。凭着他的新设计,他控制了整个超级计算机市场,并占据颠峰位置长达五年(1985-1990)。到了1980年代,正值小型电脑市场萌芽阶段,大量小型对手加入竞争。在1990年代中期,很多对手受不了市场的冲击而消声匿迹。今天,超级计算机成了一种由大型电脑公司所特意设计的电脑。虽然这些公司通过不断并购其他公司而增强了自己的经验,但除他们以外的元老公司——克雷研究——依然是超级计算机领域的巨头之一。

  超级计算机的历史

  “超级计算机”一词并无明确定义,其含义随计算机业界的发展而发生变化。早期的控制数据公司机器可达十倍速于竞争对手,但仍然是比较原始的标量处理器。到了1970年代,大部分超级计算机就已经是矢量处理器了,很多是新进者自行开发的廉价处理器来攻占市场。1980年代初期,业界开始转向大规模并行运算系统,这时的超级计算机由成千上万的普通处理器所组成。1980年代中叶,将适量的矢量处理器(一般由8个到16个不等)联合起来进行并行计算成为通用的方法。1990年代以后到21世纪初,超级计算机则主要由基于精简指令集的处理器(譬如PowerPC、PA-RISC或DEC Alpha)互联进行并行计算而实行。

  超级计算机的用途

超级计算机:隐藏在我们身边的庞然大物

  超级计算机常用于需要大量运算的工作,譬如天气预测、气候研究、运算化学、分子模型、天体物理模拟、汽车设计模拟、密码分析等等。不过随着互联网的发展,特别是云计算、大数据、Web2.0的发展,超级计算机的功能正在逐渐拓展。在最近发布的中国TOP100超级计算机中,有45台均应用于互联网领域。

  超级计算机的设计

  超级计算机的创新设计在于把复杂的工作细分为可以同时处理的工作并分配于不同的处理器。他们在进行特定的运算方面表现突出,但在处理一般工作时却差强人意。他们的数据结构是经过精心设计来确保数据及指令及时送达——传递速度的细微差别可以导致运算能力的巨大差别。其输入/输出系统也有特殊设计来提供高带宽,但是这里的数据传输延迟却并不重要——超级计算机并非数据交换机。

  根据阿姆达尔定律,超级计算机的设计都集中在减少软件上的串行化、用硬体在瓶颈上加速。近年来,并行应用的兴起使得超级计算机的发展开始向并行化过度。特别是NVIDIA与英特尔公司分别推出特定应用的加速器之后,并行计算所依赖的异构计算已经成为了超级计算机运行的主流模式,尽管在TOP500中还有许多设备并没有采用异构加速的模式,但这种趋势已经不可阻挡。

  超级计算机的类型

  从类别来划分,通用超级计算机大约可以分为以下三种类型:矢量处理机器能为大量数据同时进行同样的运算、丛集式处理器特别创建连接处理器及记忆体的通信网络和大量服务器所组建的集群。在以上三种划分中,由X86平台服务器组建的集群已经占据了超级计算机组成模式的主流,目前世界最快的超级计算机天河二号就是采用大量服务器和加速器所组建的集群。

  超级计算机的速度单位

  超级计算机速度以每秒浮点运算次数"FLOPS"(floating-point operations per second)来作量度单位,常见的表示电脑中的峰值或速度用的单位英汉对照如下:

  一个MFLOPS(megaFLOPS)等于每秒100万(=106)次的浮点运算

  一个GFLOPS(gigaFLOPS)等于每秒10亿(=109)次的浮点运算

  一个TFLOPS(teraFLOPS)等于每秒1万亿(=1012)次的浮点运算

  一个PFLOPS(petaFLOPS)等于每秒1千万亿(=1015)次的浮点运算

  一个EFLOPS(exascaleFLOPS)等于每秒100亿亿(=1018)次的浮点运算

  此外,由于浮点积和熔加运算或乘积累加是两次的浮点运算(每条FMA指令包括加/减及乘),因此当处理器支持FMA指令时,峰值是两倍每秒所能运行FMA指令的数目。