Page 28 - 《软件学报》2021年第8期
P. 28
2310 Journal of Software 软件学报 Vol.32, No.8, August 2021
panel 的行交换算法选择并通信最大主元行.Panel 分解计算完成后,把已分解数据广播到其他进程列.HPL 基础
代码包含 6 类广播算法,可以通过测试选择较优的算法.
HPL 采用行主元算法,单步矩阵更新之前,要把 panel 分解时选出的最大主元行交换到 U 矩阵中,需要执行
未更新矩阵的主元行交换和广播.主元行交换和广播后,每个进程获得完整的主元行数据.
矩阵更新包括两部分计算,一是使用 DTRSM 求解 U,二是使用 DGEMM 更新矩阵数据.
LU 分解完成后,HPL 使用回代求解 x,并验证解的正确性.
2 系统介绍
2.1 系统硬件
优化 HPL 的目标系统是典型的复杂异构系统,计算部件由通用 CPU 和计算加速器 GPU 组成,网络接口和
互联系统是高速 Infiniband 网络.
2.2 基础软件
目标 CPU 兼容 x86 指令集.编译器使用 gcc,MPI 使用 OpenMPI.
HPL 基础代码使用 2.3 版本.HPL 会调用多个 BLAS 函数.CPU 端 BLAS 使用针对目标 CPU 优化的
OpenBLIS,支持 OpenMP 实现多核并行.GPU 端 BLAS 使用针对目标 GPU 优化的 BLAS.
3 复杂异构系统 HPL 平衡点理论
从硬件的角度来看,CPU 的每个 Die 与对应的内存系统、GPU 和网络接口组成相对独立的系统.因此,在选
择并行方案时,采用 1 个进程使用 1 个 Die,并且与相应的内存、GPU 和网络接口绑定的架构.HPL 基础代码中
只有 1 列或 1 行进程时执行流程不同,较大规模并行一般是多行多列进程,因此使用 1 个节点 4 进程作为研究
对象,覆盖多行多列进程执行流程.
对于复杂异构系统 HPL 计算,需要协同调度 CPU、GPU、PCIe 和通信网络等资源.首先研究 CPU 与 GPU
计算任务分配方式,进程内 CPU 与 GPU 以及进程间的数据传输,并且建立线程模型控制 CPU、GPU 和网络接
口协同计算.然后分析 HPL 各部分的性能,提出复杂异构系统的平衡点理论指导性能优化.
3.1 计算任务分配
文献[4,6]等研究的异构系统中,CPU 执行 panel 分解计算,加速器执行矩阵更新的 DTRSM 和 DGEMM 计
算.CPU 计算能力可以达到加速器计算能力的 10%或更高,除了 panel 分解,CPU 还可以计算部分矩阵更新.并且
由于加速器内存限制,矩阵不能完全存储在加速器,矩阵更新一般采用流水的方式.
经过分析和实验对比,由于 panel 分解控制流程复杂,并且大量调用 GPU 计算效率较低的 DGEMV、DSCAL
等函数,不适合在 GPU 端实现,因此,仍然采用 CPU 计算 panel 分解的方案.
对于矩阵更新来说,目标系统 CPU 和 GPU 之间的数据传输成为瓶颈,导致矩阵更新流水线方法不再适用.
针对单个 GPU 分析,假设矩阵规模 N=58368(占用约 80%的系统内存),NB=384,矩阵更新的 DGEMM 效率为 85%.
可以计算出矩阵更新计算时间 0.52s.PCIe 单向传输矩阵数据的理论时间 1.70s.数据传输时间超过 GPU 的计算
时间,导致 GPU 超过 2/3 处于空闲状态,GPU 计算能力不能充分利用.
因此,采用矩阵数据常驻 GPU 内存的方式,矩阵更新时避免传输整个剩余矩阵.这种模式下,矩阵的规模受
限于 GPU 设备内存的容量.为了运算方便,CPU 端内存保留 GPU 端数据存储的镜像.
3.2 数据传输
数据传输包括进程内主机内存与 GPU 设备内存之间数据传输和进程间数据传输.主机内存与 GPU 设备内
存数据传输使用 PCIe 总线,一般采用 DMA 异步模式,数据传输的同时 CPU 和 GPU 可以执行计算任务.进程间
数据传输使用 MPI.如果数据传输的进程位于同一个节点,MPI 使用共享内存等技术提高数据传输性能.节点之