Linpack的局限:浮点与线性计算
DoSERV原创 崔昊 发表于:09年03月29日 17:18 [原创] 服务器在线
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例程可以加入多个并行算法,并且可根据数据分布,问题规模和机器大小选择这些算法,然而用户却不必关心这些细节。