目录

1. linpack测试工具

1.1. linpack简介

1.2. mpi简介

2. linpack配置文件及参数含义

2.1. 概览

2.2. HPL.dat参数分析

3. linpack使用及结果分析

3.1. linpack编译运行

3.2. linpack结果分析

3.2.1. linpack结果效率计算

3.2.2. 占用内存空间

4. linpack调试参数的一些心得

5. 使用pts运行linpack

5.1. 安装pts

5.2. 运行linpack


  1. linpack测试工具
  1. linpack简介

全称为线性系统软件包(Linear system package) 。

刚开始是一套专门解线性系统问题之数学软件;现在在国际上已经成为最流行的用于测试高性能计算机系统浮点性能的benchmark。

完成的任务:

通过利用高性能计算机,用高斯消元法求解N元一次稠密线性代数方程组的测试,评价高性能计算机的浮点性能(Ax=B)。测试分成三类,Linpack100、Linpack1000和HPL。前两者限制了规模;HPL即High Performance Linpack,也叫高度并行计算基准测试,可以通过调整数组大小N等各参数进行优化。

  1. mpi简介

全称为消息传递接口(Message passing interface),是一个跨语言的通讯协议,也是高性能计算领域开发并行应用的标准API。

  超算的高性能使用方式即是通过编程,使得作业具有多节点协作的能力,而多个节点之间的协作是通过MPI来实现的。通过调用MPI并行库实现的方法来实现并行化,只需要安装MPI库,那么就可以用原来的编译器来进行编译运行。高性能、大规模性和可移植性。有多种实现版本,如 MPICH,OpenMPI以及CHIMP等。

  1. linpack配置文件及参数含义
  1. 概览

HPL.dat——linpack测试中各个参数配置

run.sh——运行文件

setlargepage.sh——内存大页设置

linpack.log——结果记录文档

  1. 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)

"device out"为"6"时,测试结果输出至标准输出(stdout);

"device out"为"7"时,测试结果输出至标准错误输出(stderr);

"device out"为其它值时,测试结果输出至第三行所指定的文件中。

1            # of problems sizes (N)   #矩阵的数量,如1即一个矩阵。

105728 91392 73248 51744 44800        Ns

问题规模大小Ns值,Ns×Ns×8=系统总内存(Byte)×80%计算出的Ns一般为最大规模。

1            # of NBs

测试块的个数。

112 120 128  NBs

系数矩阵被分成NBs*NBs的循环块被分配到各个进程当中去处理,NBs大小作为计算粒度,  在很大程度上影响了计算性能的优劣;NBs最佳的取值在[32 ,256],取值大小由计算规模及平台来决定;NBs*8=Cache line的倍数。

0            PMAP process mapping (0=Row-,1=Column-major)

处理器阵列形式。0为按行,1为按列;按行的排列方式适用于节点数较少、每个节点内CPU数较多的大规模系统;按列的排列方式适用于节点数较多、每个节点内CPU数较少的系统;在机群系统下,按列排列方式较好。

1               # of process grids (P x Q)

2 2 1 4      Ps

8 2 4 1      Qs

Ps × Qs为二维处理器网格,Ps与横向通信量有关,Qs与列向通信量有关;Ps*Qs=系统CPU数=进程数;Qs/4≤P≤Qs时,性能较优。因为列向通信量(通信次数和通信数据量)要远大于横向通信;  Ps为2的幂。

16.0         threshold

说明测试的精度。用于检测线性方程组求解结果是否正确;若误差在这个值以内就是正确,否则错误。所以没有必要修改此值。

1            # of panel fact

1 1 2        PFACTs (0=left, 1=Crout, 2=Right)

1            # of recursive stopping criterium

4 2          NBMINs (>= 1)

1            # of panels in recursion

2            NDIVs

1            # of recursive panel fact.

1 0 2        RFACTs (0=left, 1=Crout, 2=Right)

指明L分解的方式。在消元过程中,zHPL采用每次完成NB列的消元,然后更新后面的矩阵。  NB的消元就是L的分解;每次L的分解只在一列处理器中完成。对每一个小矩阵作消元时,都有3种算法:L、R、C,分别代表Left、Right和Crout;NDIVs选择2比较理想,NBMINs 4或8都不错;RFACTs和PFACTs,对性能的影响不大。

1            # of broadcast

0            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)

HPL中提供了6种广播方式。前4种适合于快速网络;后两种采用将数据切割后传送的方式,主要适合于速度较慢的网络。机群系统一般采用千兆以太网甚至光纤等高速网络,所以一般不采用后两种方式。一般来说,在小规模系统中,选择0或1;对于大规模系统,选择3。

1            # of lookahead depth

1            DEPTHs (>=0)

说明横向通信的通信深度。这依赖于机器的配置和问题规模的大小。

0            SWAP (0=bin-exch,1=long,2=mix)

256        swapping threshold

说明U的广播算法。U的广播为列向广播,HPL提供了3种U的广播算法:SWAP="0",采用二元交换(Binary Exchange)法;SWAP="1",采用Long法;SWAP="2",采用二则混合法。

1            L1 in (0=transposed,1=no-transposed) form

1            U  in (0=transposed,1=no-transposed) form

分别说明L和U的数据存放格式。若选择"transposed",则采用按列存放,否则按行存放。

0            Equilibration (0=no,1=yes)……主要在回代中使用,一般使用其默认值

8            memory alignment in double (> 0)

……主要为内存地址对齐而设置,用于在内存分配中对齐地址。出于安全考虑,可以选择8

  1. linpack使用及结果分析
  1. linpack编译运行

-n 8:8为需要修改的核心数,需要修改核心数使其与HPL.dat中的Ps*Qs的值相同。

以下为内存大页设置

运行步骤:

1.   vim HPL.dat,修改参数值

2.   vim run.sh,修改核心数

3.   ./run.sh,运行

4.   运行结束后,输入cat linpack.log查看结果然后计算效率。

  1. linpack结果分析

linpack结果记录文档

GFLOPS:全称为Giga Floating-point Operations Per Second,即每秒10亿次的浮点运算数,常作为GPU性能参数。

理论峰值=主频率*核心数*每周期浮点运算次数

效率=实际峰值/理论峰值*100%

举例计算上图效率:

理论峰值=2.4GHz*2(核心数)*16(每周期浮点运算次数)=76.8GFlops

效率=51.80/76.8*100%=67.4%

因为设置了内存大页,所以通过输入free -h命令查看的内存大小不会发生变化。

所以通过top命令查看,占用内存空间=单个进程使用的虚拟内存量*进程数。

占用内存空间=单个进程使用的虚拟内存量*进程数=11.8G*8=94.4G

  1. linpack调试参数的一些心得

结论一:通过调节矩阵规模N,可小幅度提升效率

结论二:P和 Q 接近时有利于进程之间的负载平衡 ,行列方向通信能够保持平衡 ,否则可能同一对处理器之间要进行大量消息的通信;在 此前提下,P要稍小于 Q,因为根据 Linpack的算法,列向通信量要大于行向通信量,使列向的进程稍多一些可以减少通信开销。以上是官方解释,但实际测试结果是在32核情况下,2*16的效率优于4*8,16核也是这样。

结论三:其余参数在调试的时候,例如:当只变化某一个参数的时候,在某一核下效率提高,其他核就未必,因此参数之间的规律目前还没找到。

  1. 使用pts运行linpack
  1. 安装pts

#tar xf phoronix-test-suite-10.8.2.tar.gz

#cd phoronix-test-suite/

#./install-sh

#phoronix-test-suite benchmark hpl

注:打开另一个终端,可看到xhpl进程运行中即可,ctrl + c切断,以下可通过pts框架安装好的hpl进行配置文件的灵活修改

  1. 运行linpack

目录位置:/var/lib/phoronix-test-suite/installed-tests/pts/hpl-1.0.0/hpl-2.3/testing

测试命令为:/usr/lib64/openmpi/bin/mpirun --allow-run-as-root -np 128(核数) ./xhpl