HPL(高性能Linpack):基准树莓PI

基准测试是运行一些标准程序来评估系统实现的速度的过程。有一些标准的bechma ...

基准测试是运行一些标准程序来评估系统实现的速度的过程。 有一些标准的标记程序,在本教程中,我们使用一个名为HPL(也称为High Performance Linpack)的知名程序对Linux系统进行基准测试。

介绍

在本教程中,我们将介绍如何对单个处理器系统进行基准测试,即Raspberry Pi。 首先我们将对单个节点进行基准测试,然后继续对多个节点进行基准测试,每个节点代表一个Raspberry Pi。 这里有几件事要注意。 首先,对单个节点或多个节点进行基准测试具有一些要满足的依赖关系,这将在本教程中介绍。 但是,在多个节点上,还有更多的依赖关系,如MPI实现(如MPICH或OpenMPI)必须构建并运行以使HPL工作。 因此,为了对多个节点进行基准测试,我认为您的节​​点已安装并运行MPICH。

什么是HPL?

HPL是一种在分布式内存计算机上解决双精度(64位)算法的(随机)密集线性系统的软件包。 HPL软件包提供测试和计时程序,以量化所获得的解决方案的准确性以及计算所需时间。 该软件在您的系统上实现的最佳性能取决于各种因素。 这种实现是可扩展的,因为它们的并行效率相对于每个处理器内存使用保持恒定。 因此,我们可以使用它来并行对单个处理器或一系列分布式处理器进行基准测试。 所以让我们开始安装HPL。

1安装依赖关系

HPL有几个软件依赖关系,必须在安装之前才能满足要求。 他们是:

  • gfortran - fortran程序编译器
  • MPICH2 - MPI的实现
  • mpich2-dev - 开发工具
  • BLAS - 基本线性代数子程序

这里我们假设你已经安装了MPICH2。 要安装其他依赖项和软件包,请使用以下命令:

sudo apt-get install libatlas-base-dev libmpich2-dev gfortran

必须在群集中存在的每个节点(Pis)中重复此步骤。

2下载HPL并进行设置

这里下载HPL软件包。 接下来要做的是提取tar文件,并根据给定的模板创建一个makefile。 打开终端并将目录更改为存储下载的HPL tar文件的位置。 一个接着一个执行以下命令集。

tar xf hpl-2.1.tar.gz
cd hpl-2.1/setup
sh make_generic
cd ..
cp setup/Make.UNKNOWN Make.rpi

最后一个命令将Make.UNKNOWN的内容复制到Make.rpi。 我们这样做是因为,make文件包含系统的所有配置细节(raspberry pi),还有详细的各种库,如mpich2,atlas / blas包,主目录等。在下一步中,我们进行更改到Make.rpi文件。

3调整Make.rpi文件

这是重要的一步。 下面显示的更改根据您的系统而异。 我在这里显示我的系统。 请注意,以下更改具有显示的参数,分布在整个Make.rpi文件中。 所以我建议你找到每个参数,替换或添加更改,然后继续下一个参数。

使用文本编辑器使用以下命令打开Make.rpi文件:

nano Make.rpi

对文件进行以下更改。

ARCH         = rpi
TOPdir       = $(HOME)/hpl-2.1
MPdir        = /usr/local/mpich2
MPinc        = -I $(MPdir)/include
MPlib        = $(MPdir)/lib/libmpich.a
LAdir        = /usr/lib/atlas-base/
LAlib        = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a

4编译HPL

Make文件准备好后,我们可以从HPL的汇编开始。 “.xhpl”文件将出现在HPL文件夹中的“bin / rpi”文件夹中。 运行以下命令:

makeh arch=rpi

5创建HPL输入文件

以下是“HPL.dat”文件的示例。 这是HPL在运行时的输入文件。 此文件中提供的值用于生成和计算问题。 您可以直接使用此文件为单个节点运行测试。 在“bin / rpi”文件夹中创建一个文件,并将其命名为“HPL.dat”。 将下面的内容复制到该文件中。

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
5040         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
1            Ps
1            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

这个文件的内容必须通过试错法来改变,直到得到令人满意的输出。 要了解每个参数和如何更改参考这里的一个论文。 要跳到主要的角度,从第页开始阅读。 6号文件。

6在单节点上运行HPL

一旦HPL.dat文件准备就绪,我们就可以运行HPL。 以上HPL.dat文件适用于单个节点或处理器。 上述文件中的P * Q值的乘积给出了HPL正在测试的处理器数量。 因此,从上述文件P = 1和Q = 1,1 * 1 = 1,因此是单个处理器。 现在运行它使用命令:

cd bin/rpi
./xhpl

输出结果类似于以下内容:

================================================================================
HPLinpack 2.1  --  High-Performance Linpack benchmark  --   October 26, 2012
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      :   5040 
NB     :     128 
PMAP   : Row-major process mapping
P      :       1 
Q      :       1 
PFACT  :   Right 
NBMIN  :       4 
NDIV   :       2 
RFACT  :   Crout 
BCAST  :  1ringM 
DEPTH  :       1 
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

此外,我们必须集中精力于最后的结果。 终端上的最终输出将如下所示。 最后一个值给出了速度和值之前显示提供的不同参数。 在下面的内容中,速度显示在Gflops中,其值约为1.21e-01 Gflops,当转换时提供121兆FLOPS(MFLOPS)。

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4       21400   128     3    11              537.10              1.210e-01
HPL_pdgesv() start time Mon Jun 23 17:29:42 2014

HPL_pdgesv() end time   Mon Jun 23 17:55:19 2014

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0020152 ...... PASSED
================================================================================

请注意,根据您的Raspberry Pi,速度和使用时间可能会有显着差异。 所以请不要使用这些结果作为与您的节点或集群的比较。

7在多个节点上运行HPL

当我们要为多个节点运行HPL时,我们将不得不更改HPL.dat文件。 这里让我们假设我们有32个节点。 所以P * Q的乘积应为32.我选择P = 4,Q = 8,因此4 * 8 = 32。 除此之外,我们必须从尝试和错误中改变N的价值,得到N = 17400的最大速度。 最终文件内容如下所示。 在“HPL.dat”文件中进行相应的更改。

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
17400         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
4            Ps
8            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

一旦完成,我们将不得不再次运行HPL。 使用以下命令。 请记住在以下命令中更改路径,以表示系统中机器文件的路径。

cd bin/rpi
mpiexec -f ~/mpi_testing/machinefile -n 32 ./xhpl

其结果将与上述一个节点相似,但一定会有更高的速度。

可以根据系统中的节点或处理器的数量进行这种更改,并且可以发现基准测试结果。 正如我前面提到的,要更多地了解如何设置HPL.dat文件中的值,请转到文档,并给它一个阅读。