高性能基准测试HPL详解以及性能优化策略

HPL测试:求解稠密线性方程组

  • Linpack是测试高性能计算机系统浮点性能的基准测试,通过对高性能计算机采用高斯消元法求解一元N次稠密线程代数方程组的测试,评价高性能计算机的浮点计算性能

  • 计算机计算峰值是指计算机每秒钟能完成的浮点计算最大次数,是衡量计算机性能的一个重要指标。它包括理论浮点峰值实测浮点峰值

    • 理论浮点峰值是该计算机理论上能达到的每秒钟能完成浮点计算最大次数,它主要是由 CPU的主频决定的。计算公式如下:
      理论浮点峰值= C P U 主频 × C P U 每个时钟周期执行浮点运算次数 × C P U 数量 理论浮点峰值=CPU主频×CPU每个时钟周期执行浮点运算次数×CPU数量 理论浮点峰值=CPU主频×CPU每个时钟周期执行浮点运算次数×CPU数量

    • 实测浮点峰值是指 Linpack 测试值。也就是说在这台机器上运行 Linpack 测试程序,通过各种调优方法得到的最优的测试结果。

HPL安装

MPICH

MPICH是MPI(Message-Passing Interface)的应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,在程序设计语言上支持C/C++和Fortran。

sudo apt-get install gcc
sudo apt-get install gfortran

tar -zxvf mpich-xxx.tar.gz
cd mpich.xxx

//进行软件配置与检查:
//configure文件是一个可执行的脚本文件,它有很多选项
// --prefix指的是安装路径
./configure  --prefix=/usr/local/mpich-3.4.2

make 
make install
//!配置环境变量
//bashrc包含专用于某个用户的bash shell的信息
sudo vim ~/.bashrc

//最下面一行插入
export PATH=/usr/local/mpich-3.4.2/bin:$PATH
//更新配置文件
source ~/.bashrc

//!用which来检验下配置的环境变量是否正确。
which mpicc
which mpif90

GOTOBLAS

BLAS 库(Basic Linear Algebra Subprograms)即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序。常见的BLAS有GOTO、Atlas、ACML、MKL。其中GotoBlas的性能最好,因此采用GotoBlas

https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2

tar -zxvf GotoBLAS2-1.13\ tar.gz
cd GotoBLAS2

vim f_check

在这里插入图片描述

sudo apt-get install lapack
cp /home/linpack/lapack-3.1.1.tgz ./
#复制lapack到GOTOBLAS目录

make clean
make TARGET=NEHALEM

HPL

www.netlib.org/benchmark/hpl

tar -xzvf hpl-2.2
mv hpl-2.2 hpl
cd hpl
cp  ./setup/Make.Linux_PII_FBLAS  ./ 

//此时打开LinPack的配置私房菜
//注意CCFLAGS参数改一下(增添-fuse-ld=gold -pthread -lm)
make arch=Linux_PLL_PBLAS

如果编译成功:
/hpl/bin文件下会产生一个新文件,里面有HPL.dat xhpl两个文件
mpirun -np 4 ./xhpl 没有出错的话,就是安装成功了

HPL定义

HPL是指用于分布式内存计算机高性能 Linpack 基准测试的可移植实现。它主要由下面几个特点组成:

  • 二维块循环数据分布
  • 具有多个前瞻深度的行部分主元的 LU 分解的右视变体
  • 具有主元搜索和列广播的递归面板分解组合
  • 各种虚拟面板广播拓扑
  • 带宽减少交换广播算法
  • 具有深度 1 的前瞻的反向替换。

HPL自由度很大,使用者可以根据需要选择矩阵的规模,分块大小与分解方法。

HPL算法概述

​ 求解N维线性方程组Ax=b的解,首先通过局部列主元的方法对N*(N+1)的[A b]系数矩阵进行LU分解为:[A,b]=[[LU],y]。由于下三角矩阵L因子所作的变换在分解的过程中也逐步应用到b上,所以最后方程组的解α就可以由转化为求解上三角矩阵U作为系数矩阵的线性方程组Ux=y从而得到.

​ 为了保证良好的负载平衡和算法的可扩展性,数据是以循环块的方式分布到一个P×Q的由所有进程组成的2维网格中。NX(N+1)的系数矩阵首先在逻辑上被分成许多NBXNB大小的数据块,然后循环的分配到PXQ进程网格上去处理。这个分配的工作在矩阵的行、列两个方向同时进行。如图1所示。

在这里插入图片描述

图1a:一个矩阵被分成8×8个小块,要将它们分配到一个2×3的进程阵上,相同颜色的块被分配到同一个进程中去;图1b:为分配之后各个数据块在进程中的分布情况。前面所提到的N,NB,P,Q都是可以根据集群的具体配置和用户的需要而随时可以修改的。

在这里插入图片描述

HPL Frequently

  • 我应该运行什么大小的问题?
    • 为了找出系统的最佳性能,您应该瞄准内存中最大的问题大小。 HPL 使用的内存量本质上是系数矩阵的大小。例如,如果您有 4 个节点,每个节点有 256 Mb 的内存,这对应于 1 Gb 的总数,即 125 M 双精度(8 字节)元素。这个数字的平方根是 11585。肯定需要为操作系统和其他东西留下一些内存,所以 10000 的问题大小可能适合。根据经验,内存总量的 80% 是一个不错的猜测。如果您选择的问题大小太大,则会发生交换,并且性能会下降。如果在每个节点上生成多个进程(假设每个节点有 2 个处理器),那么重要的是每个进程的可用内存量。
  • 我应该使用什么块大小的 NB ?
    • HPL 使用块大小 NB 来进行数据分布以及计算粒度。从数据分布来看,NB越小,负载均衡越好。从计算的角度来看,NB 的值太小可能会在很大程度上限制计算性能,因为在内存层次结构的最高级别几乎不会发生数据重用。消息的数量也会增加。高效的矩阵乘法程序通常在内部被阻塞。该块因子的小倍数可能是 HPL 的良好块大小。底线是“好的”块大小几乎总是在 [32 … 256] 区间内。最佳值取决于系统的计算/通信性能比。在较小程度上,问题的大小也很重要。例如,您根据经验发现 44 块大小
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太一TT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值