使用HPL测试集群浮点性能

本文介绍如何使用HPL测试E-HPC集群的浮点性能。

背景信息

HPL(The High-Performance Linpack Benchmark)是测试高性能计算集群系统浮点性能的基准。HPL通过对高性能计算集群采用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算集群的浮点计算能力。

浮点计算峰值是指计算机每秒可以完成的浮点计算次数,包括理论浮点峰值和实测浮点峰值。理论浮点峰值是该计算机理论上每秒可以完成的浮点计算次数,主要由CPU的主频决定。理论浮点峰值=CPU主频×CPU核数×CPU每周期执行浮点运算的次数。本文将为您介绍如何利用HPL测试实测浮点峰值。

准备工作

  1. 创建一个E-HPC集群。具体操作,请参见使用向导创建集群

    配置集群时,软硬件参数配置如下:

    参数

    说明

    硬件参数

    部署方式为精简,包含1个管控节点和1个计算节点,规格如下:

    • 管控节点:采用ecs.c7.large实例规格,该规格配置为2 vCPU,4 GiB内存。

    • 计算节点:采用ecs.ebmc5s.24xlarge实例规格,该规格配置为96 vCPU、192 GiB内存。

    软件参数

    镜像选择CentOS 7.6公共镜像,调度器选择pbs。

  2. 创建一个集群用户。具体操作,请参见创建用户

    集群用户用于登录集群,进行编译软件、提交作业等操作。本文创建的用户示例如下:

    • 用户名:hpltest

    • 用户组:sudo权限组

  3. 安装软件。具体操作,请参见安装软件

    需安装的软件如下:

    • linpack,版本为2018。

    • intel-mpi,版本为2018。

步骤一:连接集群

选择以下一种方式连接集群。本文使用的用户名为hpltest,连接集群后会默认登录到/home/hpltest

  • 通过客户端

    该方式仅支持使用PBS调度器的集群。操作前,请确保您已下载安装E-HPC客户端,且已配置客户端所需环境。具体操作,请参见配置客户端所需环境

    1. 打开并登录E-HPC客户端。

    2. 在客户端左侧导航栏,单击会话管理

    3. 会话管理页面的右上角,单击terminal,打开Terminal窗口。

  • 通过控制台

    1. 登录弹性高性能计算控制台

    2. 在顶部菜单栏左上角处,选择地域。

    3. 在左侧导航栏,单击集群

    4. 集群页面,找到目标集群,单击远程连接

    5. 远程连接页面,输入集群用户名、登录密码和端口,单击ssh连接

步骤二:提交作业

  1. 执行以下命令创建算例文件,算例文件命名为HPL.dat。

    vim HPL.dat

    算例文件HPL.dat包含了HPL运行的参数。如下示例是在单台ecs.ebmc5s.24xlarge实例上运行HPL的推荐配置。

    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)
    143600       Ns  
    1            # of NBs
    384          NBs 
    1            PMAP process mapping (0=Row-,1=Column-major)
    1            # of process grids (P x Q)
    1            Ps  
    1            Qs  
    16.0         threshold
    1            # of panel fact
    2            PFACTs (0=left, 1=Crout, 2=Right)
    1            # of recursive stopping criterium
    2            NBMINs (>= 1)
    1            # of panels in recursion
    2            NDIVs
    1            # of recursive panel fact.
    1            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)
    0            SWAP (0=bin-exch,1=long,2=mix)
    1            swapping threshold
    1            L1 in (0=transposed,1=no-transposed) form
    1            U  in (0=transposed,1=no-transposed) form
    0            Equilibration (0=no,1=yes)
    8            memory alignment in double (> 0)

    您可以根据节点的硬件配置,调整HPL.dat文件中相关参数,参数的说明如下所示:

    • 第5~6行内容。

      1            # of problems sizes (N)
      143600       Ns 

      N表示求解的矩阵数量与规模。矩阵规模N越大,有效计算所占的比例也越大,系统浮点处理性能也就越高。但矩阵规模越大会导致内存消耗量越多,如果系统实际内存空间不足,使用缓存、性能会大幅度降低。矩阵占用系统总内存的80%左右为最佳,即N×N×8=系统总内存×80%(其中总内存的单位为字节)。

    • 第7~8行内容。

      1            # of NBs
      384          NBs 

      NB表示求解矩阵过程中矩阵分块的大小。分块大小对性能有很大的影响,NB的选择和软硬件许多因素密切相关。NB值的选择主要是通过实际测试得出最优值,一般遵循以下规律:

      • NB不能太大或太小,一般小于384。

      • NB×8一定是缓存行的倍数。

      • NB的大小和通信方式、矩阵规模、网络、处理器速度等有关系。

      一般通过单节点或单CPU测试可以得到几个较好的NB值,但当系统规模增加、问题规模变大,有些NB取值所得性能会下降。因此建议在小规模测试时选择3个性能不错的NB值,再通过大规模测试检验这些选择。

    • 第10~12行内容。

      1            # of process grids (P x Q)
      1            Ps  
      1            Qs 

      P表示水平方向处理器个数,Q表示垂直方向处理器个数。P×Q表示二维处理器网格。P×Q=进程数。一般情况下一个进程对应一个CPU,可以得到最佳性能。对于处理器为Intel® Xeon®的ECS实例,关闭超线程可以提高HPL性能。P和Q的取值一般遵循以下规律:

      • P≤Q,一般情况下P的取值小于Q,因为列向通信量(通信次数和通信数据量)要远大于横向通信。

      • P建议选择2的幂。HPL中水平方向通信采用二元交换法(Binary Exchange),当水平方向处理器个数P为2的幂时性能最优。

  2. 执行以下命令创建作业脚本文件,脚本文件命名为hpl.pbs。

    vim hpl.pbs

    脚本内容示例如下:

    说明

    本示例测试单节点的实测浮点峰值。如果您想测试多个节点的实测浮点峰值,可以修改脚本内容。

    #!/bin/sh
    #PBS -j oe
    export MODULEPATH=/opt/ehpcmodulefiles/
    module load linpack/2018
    module load intel-mpi/2018
    echo "run at the beginning"
    mpirun -n 1 -host compute000 /opt/linpack/2018/xhpl_intel64_static > hpl-output   #测试单节点的浮点性能,compute000为运行作业的节点名称,请自行替换
    #mpirun -n <N> -ppn 1 -host <node0>,...,<nodeN> /opt/linpack/2018/xhpl_intel64_static > hpl-output   #测试多节点的浮点性能,<>里的内容请根据实际替换
  3. 执行以下命令提交作业。

    qsub hpl.pbs

    返回示例如下,表示生成的作业ID为0.manager。

    0.manager

步骤三:查看作业结果

  1. 查看作业运行情况。

    qstat -x 0.manager

    预期返回如下,当返回信息中SR时,表示作业正在运行中;当返回信息中SF时,表示作业已经运行结束。

    Job id            Name             User              Time Use S Queue
    ----------------  ---------------- ----------------  -------- - -----
    0.manager         hpl.pbs          hpltest           11:01:49 F workq 
  2. 查看作业结果。

    cat /home/hpltest/hpl-output

    本次测试结果如下:

    hpl..png