超级计算机科普系列——Top500

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




Top500(http://www.top500.org)是目前比较超级计算性能的一个排行榜, 其创始人为四位大学教授:Hans Meuer、Erich Strohmaier、 Jack Dongarra和Horst Simon。 Meuer当年是德国University of Mannheim的教授,也是该校计算中心的主任,如果大家关注高性能计算领域,就会知道Meuer教授是曼海姆超级计算机研讨会(Mannheim Supercomputing Seminar)的创始人之一。该研讨会随后发展成现在超算领域两大知名会议之一的“International Supercomputing Conference”(简称ISC)。另一知名会议为“The International Conference for High Performance Computing, Networking, Storage, and Analysis”(简称“SC”)。当时Strohmaier在Meuer手下工作,他的职责之一就是把当时世界上超级计算机的统计数据汇编起来,以便在6月份举办的曼海姆超级计算机研讨会上展示。一开始,他们并未打算长期更新这个列表。然而后来他们改变了主意,决定五个月以后看看上面的机器会有什么样的变化。也就是说,他们打算在当年11月份的SC上展示。既然要比较计算机的性能,就需要用到一个测试性能的程序,而Dongarra教授是线性代数数值算法及并行计算的专家,于是就采用了他的名为Linpack的程序。Horst Simon是2000年以后加入到Top500的编辑工作中的。从1993年起,Top500的排名每年都会更新两次,一次是在6月份举办的ISC上,另一次是在11月份举办的SC上。今年的ISC将于6月16日在德国莱比锡举行。

任何一个机器,想要在Top500上崭露头角,都需要运行Linpack测试程序,然后以FLOPS(FLoating-point Operations Per Second,每秒浮点数操作)作为衡量性能的指标。需要注意的是,在Linpack中,浮点数特指64位的双精度浮点数。而在运行完Linpack测试程序之后,还需要通过对结果的验证,来保证其正确性。由于测试时可以选择不同的待求解问题规模,所以不同的机器在运行Linpack时,都会选取最合适的规模来获得最佳性能。而通常想要获得最佳性能的话,求解问题的规模需要同超级计算机所拥有的内存相匹配,这样才能使得随着机器计算性能以及内存容量的加大,使用Linpack测试性能所使用的时间也逐步变长。由最开始的几个小时,到现在的几天。这样的好处就是能够最大限度的榨取机器性能,以获得准确的数据。但是现在这个测试时间实在有些太长,而且还有可能更长。因此Jack Dongarra教授正在考虑是否只运行部分计算,使得测试时间保持在一个较为合理的范围。

Linpack到底是一个怎样的测试程序呢?简单说来,这个程序就是用来求解线性方程组的。通常,一组线性方程组都可以表示成Ax=b的形式,其中x是未知变量组成列向量,而A是各项系数组成的矩阵,b是常数项组成的列向量。根据线性代数知识,通常用高斯消元法求解x,将有n个变量的方程组通过代数运算,消去(n-1)个未知数,然后求解出剩下的唯一一个变量,再用得到的变量一次求解剩下的(n-1)个变量。那么,使用计算机该如何求解呢?通常采用的方法是先对系数矩阵A进行LU分解。其中L为下三角矩阵(矩阵主对角线上方全为0),U为上三角矩阵(矩阵主对角线下方全部为0)。如果系数矩阵为L或者U类型的矩阵,求解起来是非常容易的。其实,高斯消去法的一些列操作步骤,可以用等价的高斯矩阵表示。而高斯矩阵就属于L或者U。

问题在于,一个矩阵A并不一定能够分解为A=LU的形式,即使A是非奇异矩阵。但是数学家们已经证明:只要A是非奇异矩阵,总可以找到一个变换矩阵P,使得PA=LU存在。这样的话,原来需要求解的问题就由Ax=b变成了PLUx=b。这里,P是置换矩阵(permutation matrix),它仅由0或者1构成,并且满足每一行每一列有且仅有一个元素为1。为什么叫置换矩阵?因为用P乘以一个矩阵,其实相当于把该矩阵的行与行(或者列与列)之间进行了一些交换。 置换矩阵有很多非常有用的性质,例如置换矩阵都是正交矩阵,其逆矩阵就是其转置矩阵,等等。所以其逆矩阵总是存在。因此也就说明方程组的求解最后总可以变成LUx=PTb的求解。

接下来对Linpack中的浮点数操作(FLOP)进行分析。假定需要求解方程组Ax=b,其中A是n阶非奇异矩阵,即大小为n * n的可以求逆的矩阵。
第一步:将A分解为A=PLU的形式。该步骤的FLOP为2/3n3(也有一说为2/3n3 -1/2n2)
第二步:求解(PLU)x=b,该步骤可以分成以下三小步:
1)置换(permutation): z1 = PTb 。仅需要交换一些行,0 FLOP
2)前推(forward substitution):求解Lz2=z1。需要n2的flops
3)回代(back substitution):求解Ux=z2。需要n2的flops
由此可见,对于浮点数操作的总数为(2/3)n3+2n2。因此只需统计出这些计算所用的时间,FLOPS就可以用总的FLOP除以时间T得到。

有了这样一个标准化的程序之后,要比较各个超级计算机的性能就很容易了。把这个程序在机器上运行一遍,计算出测试得到的峰值FLOPS,大的排在前面。

Linpack根据问题的规模与优化,可以选择100* 100,1000 * 1000以及n * n三种测试。其中Top500使用的是HPL(High Performance Linpack,高度并行计算基准测试),它是一个开源的基于MPI的Linpack测试软件包。该测试对问题规模的大小没有限制,主要针对分布式内存的大规模并行计算系统设计。其要求是Linpack标准中最为宽松的,用户可以对任意大小的问题规模,使用任意个数的处理器。Linpack中使用了BLAS(Basic Linear Algebra Subroutines,基础线性代数子程序),该软件包含了矩阵的基本操作,Linpack软件包就是构建在BLAS之上的。HPL中大量的浮点运算通过BLAS实现,这样增加了HPL的可移植性,只要对被调用的BLAS进行修改,便可适应不同的计算机硬件。 Top500上提交的性能通常是最好结果,而针对Linpack的调优主要包括分块矩阵大小,以及二维处理器矩阵上的分布的参数调优等。对于HPL来说,多处理器并行所带来的通信开销以及冗余计算,一定程度上制约了峰值性能。

通常,每个Top500上的表项,都包含该机器的多个相关信息,其中比较重要的有:
Rank - 排名
Manufacturer - 制造商
#Proc - 处理器核的数量
Rmax - 能够达到的最大LINPACK的FLOPS
Rpeak - 理论上的峰值FLOPS
Nmax - 获得峰值性能时候的矩阵大小
N1/2 - 获得峰值性能一半的矩阵大小

关于峰值性能,常用单位如下:
MegaFLOPS = 106 FLOPS
GigaFLOPS = 109 FLOPS
TeraFLOPS = 1012 FLOPS
PetaFLOPS = 1015 FLOPS
ExaFLOPS = 1018 FLOPS

通过下载Top500的xls表格,可以看到更详细的信息。比如该系统是同构体系,还是由处理器+协处理器(加速部件)构成的异构系统;所用处理器以及协处理器的具体型号、节点之间所用的互联技术、操作系统种类等。以Titan超级计算机为例,可以看到制造商为Cray公司,该超级计算机坐落在美国,启用时间或者上一次大规模升级的时间为2012年。一共由56万个频率为2.2GHz的Opteron 6274 16C处理器和26万个Nvidia的K20x加速部件(GPU)组成。运行的操作系统为Cray公司定制的Linux环境,通过Cray公司的Gemini技术进行互连。

机器的理论峰值FLOPS通常经过计算得到。以Xeon Phi 5110P为例,其每个核每周期能够提供16个双精度浮点数操作,而一块Xeon Phi 5110P拥有60个核,工作频率为1.053GHz,那么单块Xeon Phi 5110P的理论峰值为16 * 60 * 1.053 = 1.01088 TeraFLOPS。1000块Xeon Phi5110P就可以提供高达1010.88 TeraFLOPS的处理能力。但理论峰值是计算能力的上限,实际是无法达到的,因此,有另外一个重要的性能指标,就是运行Linpack测试程序对超级计算机理论计算能力的利用率。该值可以用运行Linpack获得的峰值FLOPS除以理论峰值FLOPS得到。那Top500上机器的利用率大概是多少呢?这与编程人员针对特定超级计算机对Linpack进行调优的程度有关。如果参数调得比较好,那么机器的性能就能很好的发挥出来,所获得的峰值性能就更接近理论峰值,效率就比较高。目前,按照效率排名来看,靠前的主要是日本的超级计算机,然后就是美国。前三名都是日本的机器,其中曾经在2011年拔得头筹的K compter可获得高达93.17%的峰值性能,这是相当高的一个数字。另外一个比较有意思的现象,就是使用处理器+协处理器构架的机器,效率都比较低,大约在50%~60%左右。比如说使用了GPU的Tianhe-1A(54.58%),Titan(64.88%),以及使用了Intel Xeon Phi的Stampede(67.2%)。这一方面与协处理器的海量计算单元很难做到百分百的使用有关;另一方面也与使用协处理器的超级计算机需要在处理器与协处理器之间拷贝数据,因此增加了通信上的开销有关。

下面几张图展示的是从1993年以来Top500上机器的变化趋势。第一张图显示的是体系结构上的区别。Top500上的机器在90年代的时候主要以MPP+SMP为主,有着少量的Single Proc以及SIMD机器。随着时间的推移,Single Proc,SMP以及SIMD的机器都消失了,而Cluster的体系结构开始风光起来。到现在,基本上放眼Top500上的机器,是80%的cluster加上20%的MPP。第二张图显示的是Top500上超级计算机所使用的芯片。最开始是Proprietary的芯片,到了20世纪90年代末21世纪初,则进入了百花齐放的时代。当时的超级计算机用到的芯片有Alpha,IBM,HP,MIPS,SPARK。但到最后Intel逐渐发展起来,到现在的一家独大,剩下的只有AMD和IBM的powerPC了。第三张图显示的是超级计算的安装种类,这个图上变化并不明显,基本上是研究院、高校以及工业界三部分。第四张图显示的是超级计算机中所使用的加速部件/协处理器的变化趋势。从图上可以看出,在2006年之前,是没有使用协处理器的系统的。从2006年开始,出现了使用Clearspeed CSX600的超级计算机。而2008年起,出现了使用IBM PowerXCell 8i作为协处理器的超级计算机。2010年出现了使用Nvidia的GPU的超计算机(Tianhe-1A),标志着GPGPU进入了超级计算机的大舞台。而Intel也不甘示弱,在2012年推出了Intel Xeon Phi协处理器,并部署到超级计算机Stampede中。而目前排名第一的Titan,则使用了Nvidia下一代Kepler构架的K20x。

 

 

 

 

从1993年起,Top500上的机器不断刷新着最高的FLOPS,也代表着人类计算的极限速度在不断改写。从最开始Fujitsu Numerical Wind Tunnel的124.5GigaFlOPS,一路水涨船高,在1997年,Intel ASCI Red/9152已经突破了TeraFLOPS的大关。
而在IBM的 Blue Gene/L通过不断升级,霸占头名4年之后,IBM又造出了Roadrunner,突破了PetaFLOPS的极限。目前,高性能计算领域的专家们已经瞄准了ExaFLOPS这一目标。

随着ISC开幕日期的临近,Top500上的排名又将更新。届时,天河二号是否能有令人惊艳的表现,让我们拭目以待吧。

 

(没有打分)

雁过留声

“超级计算机科普系列——Top500”有12个回复

  1. kevint 于 2013-06-13 12:00 下午

    中国的路还很长,个人感觉现在去争这个第一没有什么意义。就算是第一,不过还是拿美国产的芯片堆出的一个跑分机。离硅谷这种核动力引擎的差距还非常远。产业化还是关键

  2. stupid 于 2013-06-14 7:29 下午

    Tianhe2A这次应该没有特别的表现,呵呵。

  3. K compter 于 2013-06-17 6:13 上午

    “K compter可获得高达93.17%的峰值性能”这个性能是 Rmax/Rpeak得到的,而不是运行Linpack获得的峰值FLOPS除以理论峰值FLOPS得到。

  4. stupid 于 2013-06-17 9:32 上午

    不得不更正一下,Tianhe2 夺得了Top1,不过细心的人会发现31P的计算速度和理论上最大的50P还是有一定差距,而且他们2015要推100P,这个才是重点,届时将会采用下一代互连技术。

  5. 达达主义 于 2013-06-18 6:32 上午

    回复 K compter:

    原文中有
    “Rmax - 能够达到的最大LINPACK的FLOPS
    Rpeak - 理论上的峰值FLOPS”

    你这种算法和文中说法有区别?

  6. K compter 于 2013-06-20 11:08 下午

    回复 达达主义:

    文中举例“以Xeon Phi 5110P为例,其每个核每周期能够提供16个双精度浮点数操作,而一块Xeon Phi 5110P拥有60个核,工作频率为1.053GHz,那么单块Xeon Phi 5110P的理论峰值为16 * 60 * 1.053 = 1.01088 TeraFLOPS。”举例的这个才是单cpu理论峰值,机器理论总峰值应该是所有cpu的理论峰值的和。

    Rpeak除以这个值才是机器效率。

    所以显然Rpeak不是理论峰值,Rmax也不是最大值,这两个都是linpack实际测试值。

  7. kevint 于 2013-06-21 1:16 上午

    问个弱智问题

    “理论峰值为16 * 60 * 1.053 = 1.01088 TeraFLOPS”

    这个理论峰值有意义吗。这数字从工程角度看就是骗小孩的。拿这数字算出来现有一般系统的效率估计程序猿全都都得挥刀自宫了

  8. K compter 于 2013-06-21 4:00 上午

    回复 达达主义:

    不好意思,没有计算,更正一下:Rpeak是理论峰值,刚计算了一下天河二号的理论峰值是16000*(2*0.2112+3*1.003)/1000=54.9PFlops,和Rpeak值一样。所以原文的说法是正确的。先前的回复反而不正确了。

  9. 达达主义 于 2013-06-25 6:46 上午

    回复 kevint,

    Top500里面的机器比的是实测的性能。理论峰值摆在那仅供参考。理论峰值也可以用来计算机器的效率。K computer在运行LINPACK的效率有93%,程序员怎么看?也要挥刀自宫么。。

  10. kevint 于 2013-06-25 3:07 下午

    嗯,我去看了下top 500的list。确实牛逼, fine tune system。

    不过估计只跑linpack指令空间也有限,instruction path上做到non blocking估计容易很多。

  11. 达达主义 于 2013-06-25 8:15 下午

    回复 kevint

    上top 500的计算机都必须是通用计算机。不是只能跑linpack。所以K Computer肯定也是通用计算机,你可以看wiki上的介绍。如果不要求是通用计算,用一堆FPGA来跑岂不是更块。

    所以,K computer的软件优化真心做得好。小日本在超算领域的人才储备比天朝强不少。

  12. kevint 于 2013-06-26 2:29 下午

    我没说只能跑linpack,但是这个比分确实只是跑linpack跑出来的。只能反应跑linpack的效能