linpack Benchmark
- 格式:doc
- 大小:114.00 KB
- 文档页数:5
Linpack简要说明文档
LINPACK是线性系统软件包(Linear system package)的缩写,主要开始于1974年4月,美国Argonne国家实验室应用数学所主任Jim Pool,在一系列非正式的讨论会中评估,建立一套专门解线性系统问题之数学软件的可能性。
后来便提出了LINPACK。
LINPACK主要的特色是:
●率先开创了力学(Mechanics)分析软件的制作。
●建立了将来数学软件比较的标准。
●提供软件链接库,允许使用者加以修正以便处理特殊问题,(当然程序名称
必须改写,并应注明修改之处,以尊重原作者,并避免他人误用。
)
●兼顾了对各计算机系统的通用性,并提供高效率的运算。
至目前为止,LINPACK还是广泛地应用于解各种数学和工程问题。
也由于它高效率的运算,使得其它几种数学软件例如IMSL、MATLAB纷纷加以引用来处理矩阵问题,所以足见其在科学计算上有举足轻重的地位。
LINPACK性能测试基准:
Linpack现在在国际上已经成为最流行的用于测试高性能计算机系统浮点性能的benchmark。
通过利用高性能计算机,用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点性能。
Linpack测试包括三类,Linpack100、Linpack1000和HPL。
Linpack100求解规模为100阶的稠密线性代数方程组,它只允许采用编译优化选项进行优化,不得更改代码,甚至代码中的注释也不得修改。
Linpack1000要求求解规模为1000阶的线性代数方程组,达到指定的精度要求,可以在不改变计算量的前提下做算法和代码上做优化。
HPL即High Performance Linpack,也叫高度并行计算基准测试,它对数组大小N没有限制,求解问题的规模可以改变,除基本算法(计算量)不可改变外,可以采用其它任何优化方法。
前两种测试运行规模较小,已不是很适合现代计算机的发展,因此现在使用较多的测试标准为HPL,而且阶次N也是linpack测试必须指明的参数。
HPL是针对现代并行计算机提出的测试方式。
用户在不修改任意测试程序的
基础上,可以调节问题规模大小N(矩阵大小)、使用到的CPU数目、使用各种优化方法等来执行该测试程序,以获取最佳的性能。
HPL采用高斯消元法求解线性方程组。
当求解问题规模为N时,浮点运算次数为(2/3*N^3-2*N^2)。
因此,只要给出问题规模N,测得系统计算时间T,峰值=计算量(2/3*N^3-2*N^2)/计算时间T,测试结果以浮点运算每秒(Flops)给出。
计算机计算峰值简介:
随着产品硬件的不断的升级,整个的计算能力也以数量级的速度提升。
衡量计算机性能的一个重要指标就是计算峰值,例如浮点计算峰值,它是指计算机每秒钟能完成的浮点计算最大次数。
包括理论浮点峰值和实测浮点峰值:理论浮点峰值是该计算机理论上能达到的每秒钟能完成浮点计算最大次数,它主要是由CPU的主频决定的,理论浮点峰值=CPU主频×CPU每个时钟周期执行浮点运算的次数×系统中CPU核心数目;
实测浮点峰值是指Linpack测试值,也就是说在这台机器上运行Linpack 测试程序,通过各种调优方法得到的最优的测试结果。
实际上在实际程序运行过程中,几乎不可能达到实测浮点峰值,更不用说达到理论浮点峰值了。
这两个值只是作为衡量机器性能的一个指标,用来表明机器处理能力的一个标尺和潜能的度量。
使用LINPACK需要注意的一些问题:
●LINPACK中浮点运算的比例很高,但有一些运算很少用到,比如浮点除
法。
●在LINPACK测试中执行时间大部分用在了一小部分代码模块上,所以只
需要很小的一块指令内存缓冲区即可有很高的命中率。
●数据命中率对内存大小要求很高(相对与代码),LINPACK对内存的设
置很敏感,200*201与200*200规模的数组计算在内存中的映射可能不
同,从而导致执行时间有一个相当程度的变化(详细见CLINPACK代码),
所以在进行测试的时候需要根据内存情况进行求解规模的设置,以求的
测得的性能最优。
●针对测试可以进行并行计算的硬件平台选用HPL比较合适,注意在进行
HPL测试时需要安装并行测试软件(MPICH2)与BLAS(Basic Linear
Algebra Subprograms)库,推荐使用GotoBlas2。
详细的安装测试方法
可以参考相关文档。
CLINPACK代码分析:
下面对分析一个简化版本的CLINPACK代码,以大概了解LINPACK的测试方法。
首先在分析代码之前先了解下一些设置:
1.SP与DP:SP代表单精度,类型为float;DP为双精度,类型为double。
2. ROLL与UNROLL:ROLL代表在进行矩阵向量原子操作时(包含一次加法与一次乘法的表达式)在for循环中一次完成一条语句;UNROLL则代表在for 循环中一次完成4条语句。
3. dtime()函数的平台指定,在测试中必须指定运行代码的平台,以便调用相应的计时函数dtime()。
4. 数组st[6][8]用来记录测试代码执行的相关结果,如时间等,后面将详细说明其含义。
5. 求解规模为n=100,浮点运算的次数为ops = (2.0e0*(n*n*n))/3.0 + 2.0*(n*n)。
6. 在CLINPACK中使用的矩阵规模有2个,aa[200][200],a[200][201],这些要分别测试并选择执行时间较少的一个作为最终结果。
CLINPACK中主要测试函数介绍:
●matgen(a,lda,n,b,norma),用来生成一个随机矩阵;
●dmxpy(n1,y,n2,ldm,x,m),用矩阵m乘向量x,并将结果加到向量y上;
●dgefa(a,lda,n,ipvt,info)与dgesl(a,lda,n,ipvt,b,job),用来进行
高斯消元法求解矩阵,测试时间记录的就是这两个函数的运行时间;
●其他,作为子函数被调用,进行一些矩阵处理。
CLINPACK的主要测试过程:
整个测试分为两个大的部分,分别测试不同规模的矩阵aa跟a。
每个部分的测试方法一致,故在此只描述a矩阵规模的测试。
测试过程如下:
调用matgen生成一个矩阵;
调用dgefa,记录其运行时间st[0][0];
调用dgesl,记录其运行时间st[1][0];
调用dmxpy对矩阵进行处理;
总时间total=st[0][0]+st[1][0],st[2][0]=total,st[3][0]=
ops/(1.0e3*total),st[4][0] = 2.0e3/st[3][0],st[5][0] = total/cray;
再次调用matgen,dgefa,dgesl,并且按上述规则记录数据为st[1..5][1];
进行NTIMES次循环调用matgen,dgefa,dgesl,记录平均运行时间,然后按上述规则统计数据为st[1..5][3],此时完成规模为矩阵a的运行过程;
按照上述流程计算规模为矩阵aa的数据;
…
比较st[3][3]与st[3][7]的大小(即total总时间),根据较小者计算浮点运算的性能数据kflops = (int)(kf + 0.5),kf=st[3][3]或者kf=[3][7]。
运行结果如下所示(windows xp平台下):
附录:
CLINPACK的测试与机器选择的操作系统,硬件环境,负载情况均有关系,从而导致测试结果在同一台机器上可能相差超过10%。
这里选择windows xp操作系统,在两台不同的机器进行了测试,设置为ROLL模式,精度为Double。
机器A:CPU:Pentium Dual-Core E5200 2.5GHz、内存:2G、硬盘:250G;机器B:CPU:Pentium Dual-Core E5300 2.5GHz、内存:4G、硬盘:250G。
测试结果对比如下(这里选择的是出现次数最多的结果):
机器A:
机器B:。