使用HPL软件测试服务器浮点数计算性能

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据