HPL(High-Performance Linpack)软件使用Linpack算法来测试计算机双精度浮点数计算性能。
安装HPL软件
# 安装mpich
wget http://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz -P ~/software/
tar zxf ~/software/mpich-3.3.tar.gz
cd mpich-3.3
./configure --prefix=/opt/sysoft/mpich-3.3 && make -j 4 && make install
cd .. && rm -rf mpich-3.3
echo 'export PKG_CONFIG_PATH=/opt/sysoft/mpich-3.3/lib/pkgconfig:$PKG_CONFIG_PATH' > ~/.bashrc.mpich
echo 'export LD_LIBRARY_PATH=/opt/sysoft/mpich-3.3/lib:$LD_LIBRARY_PATH' >> ~/.bashrc.mpich
echo 'export C_INCLUDE_PATH=/opt/sysoft/mpich-3.3/include:$C_INCLUDE_PATH' >> ~/.bashrc.mpich
echo 'export PATH=/opt/sysoft/mpich-3.3/bin/:$PATH' >> ~/.bashrc.mpich
source ~/.bashrc.mpich
# 安装openblas
sudo yum -y install openblas openblas-devel
# 若是CentOS8系统
sudo dnf --enablerepo=PowerTools install gcc-fortran openblas openblas-devel
# 安装hpl
wget http://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz
tar zxf hpl-2.3.tar.gz
cd hpl-2.3/
source ~/.bashrc.mpich
./configure --prefix=/opt/sysoft/hpl-2.3
make -j 8
make install
cd ../ && rm -rf hpl-2.3
在当前目录下生成HPL的配置文件HPL.dat,该配置文件适合72核心的单节点服务器。
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)
82944 Ns
1 # of NBs
144 NBs
0 PMAP process mapping (0=Row-,1=Column-major)
1 # of process grids (P x Q)
8 Ps
9 Qs
16.0 threshold
2 # of panel fact
2 1 0 PFACTs (0=left, 1=Crout, 2=Right)
1 # of recursive stopping criterium
2 4 NBMINs (>= 1)
1 # of panels in recursion
2 NDIVs
1 # of recursive panel fact.
1 0 2 RFACTs (0=left, 1=Crout, 2=Right)
1 # of broadcast
0 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1 # of lookahead depth
0 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)
配置文件中的重要参数如下:
1 # of problems sizes (N)
设置程序运行时使用的 N 值的个数。
82944 Ns
设置程序运行时使用的 N 值。上一个参数的值有多大,此处则输入对应个数的 N 值。N 值为Linpack进行浮点运算的问题规模。求解问题规模为N时,Linpack浮点运算次数 = 2 / 3 * N^3 - 2 * N^2。再测得系统计算所消耗的时间T,即可算出浮点运算每秒次数FLOPS值。需注意内存和计算时间消耗随该值增大呈指数级增加,内存消耗=N*N*8。比如该参数值为20000时消耗3.2GB内存,设置为30000时消耗约7.2GB内存。在HPL软件进行计算时,该值设置越大,有效计算所占的比例也越大,其结果FLOPS值越大。此外,该值推荐设置为 P * Q * NB 的整数倍。
1 # of NBs
设置程序运行时使用的 NB 值的个数。
144 NBs
设置数据分块数量,有利于并行化计算。上一个参数的值有多大,此处则输入对应个数的 NB 值。推荐设置为 P * Q 的整数倍。要计算的问题规模比较大,将这些计算均匀分配给各个CPU核心。
1 # of process grids (P x Q)
设置程序运行时使用的 P x Q 的个数。
8 Ps
9 Qs
设置并行化和多线程的CPU使用个数。尽可能让P和Q相等,并使两者的乘积为服务器的CPU总核心数,使P <= Q,也最好使P值为2的n次方。上一个参数设置有多大,则此处输入对应个数的P和Q值。
2 # of panel fact
2 1 0 PFACTs (0=left, 1=Crout, 2=Right)
设置panel fact的值个数。上面设置了使用2种panel fact参数,下一个参数虽然有3个值,于是HPL运行时选取使用前两个值。
后面还有几个这样的参数设置。但是对结果影响不大。只有前面的N, NB, P 和 Q 对结果影响较大。特别是 N 值影响最大。
运行HPL程序进行FLOPS计算
/opt/sysoft/mpich-3.3/bin/mpirun -np 72 /opt/sysoft/hpl-2.3/bin/xhpl
程序运行需要当前目录下存在HPL.date配置文件。
程序运行的注意事项:
(1)mpirun的-np参数值是服务器的CPU总核心数。对应着参数文件种 P * Q 的值。要求 -np 参数的值 >= P * Q,否则程序报错。
(2)HPL若使用超线程后总CPU线程数来进行计算,其FLOPS值更低,比用总核心数低约20%。
(3)若可以的话,设置不同的参数来让HPL程序运行多次,取其最高值(峰值)作为服务的FLOPS计算性能。
(4)配置以 # 开始的参数用于设置多个值,程序有7个参数可以设置不同的多个值,于是排列组合后可以运行很多次,选择最大值作为FLOPS计算峰值。
(5)当设置多种参数值,会很消耗计算时间,且其结果都相差不大,则可以考虑节约时间,不用设置太多的参数值。
(6)程序第一个运行种CPU刚唤醒,导致其有效计算所占的比例要小些,其结果会差些,特别是N值设置不够大时更明显,推荐至少有2次运行。
(7)设置稍大的 N 值,让每次Linpack程序运行时间长度超过200秒,则获得的结果更准确些。若运行时间太长,则感觉很费时间。
程序结果如下。按上面的配置文件,设置了2个不同的参数运行。第一次运行的结果一般较低,直接看第二次的结果作为服务器的计算性能:1297 Gflops。
================================================================================
T/V N NB P Q Time Gflops
--------------------------------------------------------------------------------
WR00C2R2 82944 144 8 9 311.44 1.2215e+03
HPL_pdgesv() start time Sat Apr 10 06:32:55 2021
HPL_pdgesv() end time Sat Apr 10 06:38:06 2021
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 1.11497782e-03 ...... PASSED
================================================================================
T/V N NB P Q Time Gflops
--------------------------------------------------------------------------------
WR00C2C2 82944 144 8 9 293.31 1.2970e+03
HPL_pdgesv() start time Sat Apr 10 06:38:15 2021
HPL_pdgesv() end time Sat Apr 10 06:43:09 2021
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 1.07067674e-03 ...... PASSED
================================================================================
使用HPL对一些服务器的FLOPS测试结果如下:
服务器型号 CPU型号数量 整体FLOPS 系统
惠普DL580G9 E7-8890 V3 * 4 1297.0 GFlops CentOS7
华为RH5885H V3 E7-4890 V2 * 4 904.68 GFlops CentOS7
华为RH5885H V3 E7-4890 V2 * 4 614.23 GFlops CentOS8
惠普DL980G7 E7-4870 * 4 339.53 GFlops CentOS8