为熟悉集群环境,这几天动手在cu15cu16cu17cu19 上搭建了个linpack测试环境。Linpack测试包括三类,Linpack100Linpack1000HPLLinpack100求解规模为100阶的稠密线性代数方程组,它只允许采用编译优化选项进行优化,不得更改代码,甚至代码中的注释也不得修改。Linpack1000要求求解1000阶的线性代数方程组,达到指定的精度要求,可以在不改变计算量的前提下做算法和代码上做优化。HPLHigh Performance Linpack,也叫高度并行计算基准测试,它对数组大小N没有限制,求解问题的规模可以改变,除基本算法(计算量)不可改变外,可以采用其它任何优化方法。前两种测试运行规模较小,已不是很适合现代计算机的发展。 HPL是针对现代并行计算机提出的测试方式。用户在不修改任意测试程序的基础上,可以调节问题规模大小(矩阵大小)、使用CPU数目、使用各种优化方法等等来执行该测试程序,以获取最佳的性能。
在安装HPL之前,系统中必须已经安装了编译器、并行环境MPI以及基本线性代数子方程(BLAS)或矢量图形信号处理库(VSIPL)两者之一。
编译器必须支持C语言和Fortran77语言。并行环境MPI一般采用MPICH,当然也可以是其它版本的MPI,如LAMMPIHPL运行需要BLAS库或者VSIPL库,且库的性能对最终测得的Linpack性能有密切的关系。常用的BLAS库有GOTOAtlasACMLESSLMKL等,
并行环境MPI我采用的是安装Infi-MPIBLAS库我选择的是GotoBLASHPL从 [url]www.netlib.org/benchmark/hpl[/url] 网站上下载HPLhpl.tar.gz,目前HPL的最新版本为2.0
具体步骤如下:
安装IBA,使用它自带的mpi.
>tar zxvf InfiniServBasicGPL.4.1.1.0.15.tgz
>cd InfiniServ.4.1.1.0.15/
> ls
> cd ALL_HOST/
> ls
> ./do_build
> cd release/
> ls
> cd redhat/
> ls
> cd X86_64/
> ls
> cp -r InfiniServ.4.1.1.0.15G /opt/ib
> cd  /opt/ib
> ls
> cd ib
> ls
> ./INSTALL
(2)
编译安装GotoBLAS
编辑
vi Makefile.rule
    #BINARY64 = 1  ==>> BINARY64 = 1
GotoBLAS目录下,执行:
make
exports目录,生成so文件

    cd exports
    make so
拷贝xerbla.oGotoBLAS目录
    cp level1/others/xerbla.o ./
(3)编译安装HPL
HPL目录下,在setup文件中选出Make文件,我的选择是Make.Linux_PII_CBLAS文件,copyHPL的目录下,

重命名为Make.Linux
修改Make.Linux,如下:
ARCH= Linux_PII_CBLAS==>>ARCH= Linux
TOPdir= $(HOME)/hpl ==>> TOPdir= /opt/hpl
MPdir= /usr/local/mpi==>> MPdir= /opt/iba
MPlib= $(MPdir)/lib/libmpich.a==>> MPlib= $(MPdir)/lib64/ libmpich.a
LAdir= $(HOME)/netlib/ARCHIVES/Linux_PII ==>>LAdir= /opt/GotoBLAS
LAlib=$(LAdir)/libcblas.a   $(LAdir)/libatlas.a ==>> LAlib=$(LAdir)/libgoto_prescott-r1.26.so  $(LAdir)/xerbla.o
HPL_OPTS= -DHPL_CALL_CBLAS  ==>> HPL_OPTS=
CC=/usr/bin/gcc ==>> CC=/opt/iba/bin/mpicc
LINKER=/usr/bin/g77 ==>> LINKER=/opt/iba/bin/mpif77
编译
    make arch=Linux
完成后在/opt/iba/bin/Linux目录下会出现HPL.datxhpl两个文件,表示成功
 
安装完以后,运行hpl之前,需要修改HPL.datHPL的几个主要参数如下:
N:测试方程矩阵的大小
NB:矩阵分块的大小
MAP:制定进程映射道计算节点的方式
P,Q:处理器网格的行、列大小
PFACTRFACT:矩阵的消元方法
NBMIN:矩阵分块的递归最小值,当矩阵分块小于该值时停止划分
NDIV:每次递归划分子矩阵的个数
BCAST:矩阵向外广播方式
DEPTH:HPL算法分几次广播出去
理论上,这些参数中对测试结果有较大影响的是P*Q,N,NB。剩余参数对结果的影响较小。P*Q主要依赖于系统的网络结构和性能。N主要受限于系统主存空间总量,一般N=sqrt(主存总量/8)*80%。而NB则主要受通信-计算比、cache行大小以及测试矩阵大小的影响。
我直接采用的就是自动生成的HPL.dat文件,运行mpirun –hostfile mpi.hosts –np 8 xhpl>&out,然后 cat out,得到结果部分显示如下:
================================================================================
HPLinpack 2.0  --  High-Performance Linpack benchmark  --   September 10, 2008
Written by A. Petitet and R. Clint Whaley,  Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================
An explanation of the input/output parameters follows:
T/V    : Wall time / encoded variant.
N      : The order of the coefficient matrix A.
NB     : The partitioning blocking factor.
P      : The number of process rows.
Q      : The number of process columns.
Time   : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.
The following parameter values will be used:
N      :      29       30       34       35
NB     :       1        2        3        4
PMAP   : Row-major process mapping
P      :       2        1        4
Q      :       2        4        1
PFACT  :    Left    Crout    Right
NBMIN  :       2        4
NDIV   :       2
RFACT  :    Left    Crout    Right
BCAST  :   1ring
DEPTH  :       0
SWAP   : Mix (threshold = 64)
L1     : transposed form
U      : transposed form
EQUIL  : yes
ALIGN  : 8 double precision words
--------------------------------------------------------------------------------
- The matrix A is randomly generated for each test.
- The following scaled residual check will be computed:
      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- The relative machine precision (eps) is taken to be               1.110223e-16
- Computational tests pass if scaled residuals are less than                16.0
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2L2          29     1     2     2               0.05              3.340e-04
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2L4          29     1     2     2               0.00              1.244e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2C2          29     1     2     2               0.00              1.262e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2C4          29     1     2     2               0.00              1.276e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2R2          29     1     2     2               0.00              1.301e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00L2R4          29     1     2     2               0.00              1.301e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00C2L2          29     1     2     2               0.00              1.297e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00C2L4          29     1     2     2               0.00              1.297e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR00C2C2          29     1     2     2               0.00              1.318e-02
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0188218 ...... PASSED
================================================================================