对Top500超级计算机排名"非议"(4)

时间:2011-03-15   来源:天涯论坛   网友评论:0   人气: 658 作者: fkpop等


Linpack的局限:浮点与线性计算
  Cleve Moler所为人熟知的原因并非他对Linpack计算所作出的努力,几乎每一个数学系毕业的学生(包括我本人这个数学系毕业的不才学生),几乎对Cleve Moler的名字都十分熟知,因为他开发了对数学计算,尤其是计算数学产生重大影响的MATLAB:  
  到70年代后期,身为美国New Mexico大学计算机系系主任的Cleve Moler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。Cleve Moler给这个接口程序取名为MATLAB。
  MATLAB时至今日已经是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,在数值计算方面无比强大,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域——但是,在初期,无论是Linpack和MATLAB都是以线性计算为基础的,这从Linpack的原名即可得知。
  另一方面,Linpack专注于浮点运算,首先,我们要明白,数和计算通常是按“整数”或“浮点数”进行划分的。整数计算使用计算的所有位(如32位)记录整数“值”。而浮点计算则使用计算的一部分位表示“值”(如23位),另一部分位表示指数(8位)。由于一部分位用来表示指数,所以浮点计算得出的值可以比整数计算得出的值大很多或是小很多。换句话说,对于给定数量的位,浮点计算的精度没有整数计算高,但浮点计算结果的范围却比整数计算大很多——后面我们随提及为何整数计算并非如人们所传言无所大用。
  这也就是说,Linpack几乎可以被人做是一个面向数学计算领域的线性计算方法及评价标准,这也就意味着,尽管Linpack数据具有极强的评价能力,却正显得有些不合时宜了。
  
  对于大部分高性能计算用户来说,HPC被用来进行大量的科学计算,所以对于诸如石油勘探、地质勘测、天气预报等用户来说,非常注重服务器的浮点计算能力,而对于整数运算能力却并不太关心,整数运算能力是指系统对于16位以内数据的计算精确度和速度,而浮点运算能力代表的是一个计算机系统对于16位以上数据的计算速度和结果精确度。所以,对于高性能计算机的用户来说,在采购服务器的时候,对于厂商提供的SPECfp2000浮点运算基准测试要给予重点关注,而对于一般的商业用户来说,一个计算机系统的浮点运算能力强或者弱,并没有太大的实质意义,这个用户群体更应该关注诸如TPC-C等在线事务交易处理性能。
  另一方面,Linpack的出现主要是因为上世纪七十年代线性代数方程组在各个领域的应用十分广泛,所以该软件包就很自然地称为测试各种机器性能的测试程序,但是随着科学计算的深入,更多数学方法出现在人们面前,即使是线性计算方面的计算方法也获得了强大的发展。
  更有甚者,尽管Linpack作为数学型的测试程序现在仍很有生命力,但作为实际求解线性代数问题的软件包甚至都已经开始落伍了:
  1992年出现了代替Linpack以及EisPACK(特征值软件包)的LAPACK,它使用了数值线性代数中最新、最精确的算法,同时采用了大型矩阵分解成小矩阵的方法从而可有效地使用存储器。LAPACK是建立在BLAS1 ,BLAS2,BLAS3的基础上的,其中BLAS2执行矩阵-向量运算,BLAS3执行矩阵-矩阵运算。
  
  随后出现的是ScaLAPACK,其被称为LAPACK的增强版,主要为可扩放的,分布存储的并行计算机而设计的。ScaLAPACK支持稠密和带状矩阵上各类操作,诸如乘法,转置和分解等。在国际上,ScaLAPACK例程可以加入多个并行算法,并且可根据数据分布,问题规模和机器大小选择这些算法,然而用户却不必关心这些细节。
高性能计算的更多基准测试方法
  相较于Linpack,更多的高性能计算基准测试方法正在逐步应用到测试中,以更加可观的衡量和对比不同高性能计算系统在各种不同应用上面的性能特征。
  以SPECfp_rate_base2006为例,其是一项计算密集型性能指标评测,用于衡量计算机系统在运行大量并行任务时的浮点吞吐性能。性能指标评测包括从实际最终用户应用开发而来的一组十四个浮点工作负载。通过将性能指标评测的拷贝数量设置成操作系统可识别的逻辑硬件内核数量而同时运行多个性能指标评测拷贝来测量系统吞吐率。报告的性能得分是按工作/小时测量的系统吞吐率的衡量标准。得分越高表示性能越好。
  从分类上来说,综合型、核心型、数学计算型、应用型和并行计算型等,上面所说的SPEC计算与Whetstone和Dhrystone即属于综合型,不过在综合型中,后两种基准测试方法由于编译程序较为敏感,造成了对用户程序性能预测的不确定性,因此已经基本上被不同类型的SPEC计算所取代,SPEC最早是作为NCGA(National computer graphics association)的一个小组20世纪80年代创立的,第一组基准测试程序叫SPEC89,包含10个程序; SPEC92扩从到20个程序,6个整数程序,和14个浮点程序分别称为SPECint92,SPECfp92。随后SPEC又发布了一些新的基准测试程序(如SPEC95,SPEChpc96,SPECweb96, SPEC2000等)。SPEC原主要是测试CPU性能的,现在强调开发能反映真实应用(如实际负载等)的基准测试程序,并已推广至客户/服务器计算,商业应用,I/O子系统等。
  数学计算型基本上可以等同于Linpack计算+FFT(FFT有浮点的(就是普通的FFT),有整数的(就是离散化的FFT)),而核心型的主要包括Livemore、Fortran Kernals、NASA NAS等,而并行的主要为NPB和PARKBENCK,具体的测试方式介绍在此就不在赘述,可以从http://www.netlib.org/liblist.html查到,可以在其中的“Benchmark Programs and Reports”页面看到比较全面的测试介绍


 

文章评论