一、LinPack简介
1、概念:LinPack全称为线性系统软件包。用于测试高性能计算机系统浮点性能的benchmark
2、完成的任务:通过利用高性能计算机,用高斯消元法求解N元一次稠密性线性方程组的测试(如Ax+By=C)
测试分为三类:
LinPack100:计算100阶
LinPack1000:计算1000阶
HPL:高度并行计算基准测试,可以通过调整数组大小N等各参数进行优化
二、mpi接口
mpi简介
全称为消息传递接口(Message passing interface),
是一个跨语言的通讯协议,也是高性能计算领域开发并行应用的标准API。
超算的高性能使用方式即是通过编程,使得作业具有多节点协作的能力,
而多个节点之间的协作是通过MPI来实现的。通过调用MPI并行库实现
的方法来实现并行化,只需要安装MPI库,那么就可以用原来的编译器
来进行编译运行。高性能、大规模性和可移植性。有多种实现版本,
如 MPICH,OpenMPI以及CHIMP等
三、linpack配置文件及其参数意义
1、有以下配置文件
HPL.dat—— linpack测试中各个参数的配置
run.sh—— 运行文件
sellargepage.sh——内存大页设置
linkpack.log—— 结果记录文档
2、HPL.dat 参数分析
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 |
编译运行后若为 -n 8:8
说明需要修改核心数,使其与HPL.dat中的Ps*Qs的值相同
3、内存大页设置
运行步骤:
vim HPL.dat,修改参数值
vim run.sh,修改核心数
./run.sh,运行
运行结束后,输入cat linpack.log查看结果然后计算效率
4、 linkpack.log—— 结果记录文档
结果分析
(1)linpack结果效率计算
理论峰值=主频率*核心数*每周期浮点运算次数
效率=实际峰值/理论峰值*100%
举例计算上图效率:
理论峰值=2.4GHz*2(核心数)*16(每周期浮点运算次数)=76.8GFlops
效率=51.80/76.8*100%=67.4%
(2)占用内存空间
因为设置了内存大页,所以通过输入free -h命令查看的内存大小不会发生变化。
所以通过top命令查看
占用内存空间=单个进程使用的虚拟内存量*进程数
eg: 11.8G * 8 = 94.4G