标题：linpack
引言
计算机硬件的不断的升级带来了系统处理性能持续的提高，如何的对平台的性能作出正确的判断就是性能测试的主要目标，业界也有多种测试基准，有的是基于实际的应用种类如TPC－C，有的是测试系统的某一部分的性能，如测试硬盘吞吐能力的IOmeter，测试内存带宽的stream。
Linpack的始用途
LINPACK主要的特色是： 
v 率先开创了力学 (Mechanics) 分析软件的制作。 
v 建立了将来数学软件比较的标准。 
v 提供软件链接库， 允许使用者加以修正以便处理特殊问题， (当然程序名称必须改写， 并应注明修改之处， 以尊重原作者， 并避免他人误用。) 
v 兼顾了对各计算机系统的通用性， 并提供高效率的运算。 
至目前为止， 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测试程序，通过各种调优方法得到的最优的测试结果。实际上在实际程序运行过程中，几乎不可能达到实测浮点峰值，更不用说达到理论浮点峰值了。这两个值只是作为衡量机器性能的一个指标，用来表明机器处理能力的一个标尺和潜能的度量。
测试过程
1、硬件准备
准备硬件平台的配置
升级到最新的BIOS、BMC等版本
调整对性能有影响的参数设置
2、软件准备
操作系统的准备。由于OS自身也会占用系统资源，因此一般会使用linux作为linpack测试的OS平台，采用最新的内核版本的linux，这样可以充分的发挥出硬件的新的特性，发挥出平台的计算性能；在系统启动后，将一些没有必要的系统守护进程去掉，可以运行ntsysv命令，关闭除了irqbalance 和 messagebus.之外的系统服务进程，也可以节省系统的资源；并且将操作系统启动到第3级，不要进入图形方式。3、linpack的参数设置
运算阶数N的选择。
由于在计算的过程中，会分配、占有一定的内存空间，因此依据内存容量合适的设置N的数值，会得到较为准确的计算性能数据。如果N设置较小，内存不能充分利用，则处理能力不能发挥；如果N设置较大，内存空间不能满足需求，则需要经常的执行硬盘读写，从而会有处理器的等待时间，计算时间会延长，测试得到计算性能结果也会受到影响。根据内存容量大小，对应的N的数值有如下的参考关系。 内存容量（G） 4 8 16N（计算阶数） 22000 31000 44000例如在内存容量为4G时，设置N为22000较为合理，这样内存分配较为合理，因此在22000阶时，可能得到最大计算性能值。
配置文件的编写。
下面是linpack运行的参数配置文件的例子，其中包括一个参数。
v 计算的点数，原则上是计算的点数越多，则会遍历多种计算的性能情况，更能找到最好的性能点，但是点数越多则运算时间越长。
v 点数的分布。即设定几个不同的阶数值，一般是在N附近的时候的阶数分布较为密，以便找到最佳性能数据。
v 每个计算点的计算次数，为了减少测试误差，增加每点的计算次数取其平均值，得到比较可信的性能数据。
v 设置内存的对齐尺寸，内存分配的时候的内存对其方式，可以提高内存的读取的效率，提高性能测试结果，但是设置过大会产生一定的内存空间的浪费，一般为4KB或8KB
下面是一个完整的配置文件的例子： LINPACK data12                     # number of tests1000 2000 5000 10000 15000 20000 25000 27000 28000 29000 30000 31000 # problem sizes1000 2008 5008 10008 15000 20008 25000 27000 28008 29000 30008 31000 # leading dimensions4 2 2 2 2 2 2 2 2 2 2 2 # times to run a test8 8 8 8 8 8 8 8 8 8 8 8 # alignment values (in KBytes)3、运行
Intel提供了基于IA架构平台优化后的可执行版本3.0.1，不需要下载源代码再通过编译器，编译优化，因此使用起来比较的简单和方便。现在可以执行的平台有
xlinpack_itanium 在64位安腾2平台上的可执行程序
xlinpack_xeon32 在32位至强DP和至强MP平台上可执行程序，同时可支持有或没有SSE3指令集的情况。
xlinpack_xeon64 可运行在64位扩展技术的至强平台上
xlinpack_mc64 运行在Intel Core 2 Duo和Woodcrest新一代处理器上的程序。.
可以编写一个shell的脚本文件，这样可以灵活的控制运行的过程，运行结果的记录等。例如下面的脚本文件的例子，先设置系统内的对称多处理器的数目，在使用参数设置文件的参数运行linpack，并把结果输出到一个文本文件内。 #export OMP_NUM_THREADS=2 echo "This is a SAMPLE run script. Change it to reflect the correct number"echo "of CPUs/threads, problem input files, etc.." datedate > lin_xeon32.txt./xlinpack_xeon32 lininput_xeon32 >> lin_xeon32.txtdate >> lin_xeon32.txtecho -n "Done: "date4、结果查看
根据上面的运行脚本文件，运行结果输出到文件lin_xeon32.txt内。
性能测试举例
利用此工具对NP370D产品做了计算性能的测试，内存使用相同的4G容量，结果如下： 配置 OS及版本 计算次数（GFlops）Dempsey 3.0*2 Linux 4U1 12.6854Woodcrest 1.86*2 Linux 4U1 16.4117Woodcrest 2.66*2 Linux 4U1 23.1015从测试数据看，woodcrest处理器比dempsey的浮点计算能力有较大的提升，通过后续的软硬件的参数的调优，平台的计算能力还会不同程度的提升。