Page 32 - 《软件学报》2021年第8期
P. 32
2314 Journal of Software 软件学报 Vol.32, No.8, August 2021
Table 2 Time of BLAS functions in panel factorization
表 2 Panel 分解 BLAS 函数时间
函数 时间(s)
DGEMM 5.26+00
DTRSM 7.14−02
DSCAL 1.92−01
DGEMV 2.87−01
DTRSV 5.72−03
DIDAMAX 2.56−01
5.1.2 GPU 加速 panel 分解 DGEMM
从第 5.1.1 节可以看出,panel 分解中,DGEMM 时间占有最大比例,需要进一步优化.DGEMM 在 panel 分解
递归层次调用.根据 panel 分解的 left-looking 算法,从左到右执行 LU 分解,左侧的 subpanel 完成分解之后,执行
DGEMM,更新相同层次的右侧的 subpanel,GPU 可以加速这部分 DGEMM.
GPU 加速 DGEMM 的算法过程,首先把左侧 subpanel 和相应的 U 数据传输到 GPU 设备内存,然后执行
DGEMM 更新 GPU 内存的右侧 subpanel,更新后数据传输到 CPU 端内存,继续执行后续的 panel 分解.算法增加
了 CPU 和 GPU 之间的数据传输,但由于 GPU 执行 DGEMM 的速度远高于 CPU,在一定规模 DGEMM 的情况
下,这一过程总的执行时间少于 CPU 端执行 DGEMM 时间,整体性能提高.
并不是所有的 panel 分解 DGEMM 都可以使用 GPU 加速,如果传输的时间开销大于 DGEMM 加速的效果,
就不能采用这种方式.实际计算中,使用参数控制采用 GPU 加速 DGEMM 的阈值,通过调优获得最佳的性能.
5.1.3 Panel 广播优化
5.1.3.1 避免数据封装
基础代码中,panel 分解数据使用 CPU 端矩阵 A 的内存,A 是列存储,panel 分解的列是分段连续的.使用 MPI
传输 panel 数据之前,需要执行数据封装,把数据复制到发送缓冲区,而复制操作会带来一定的时间开销.
为此提出一种避免数据封装的方法.待分解的 panel 数据是从 GPU 内存复制的,通过使用二维复制接口把
panel 数据复制到连续存储区域.Panel 分解计算完成后,MPI 接口直接使用缓冲区数据,避免了数据封装.
5.1.3.2 Panel 广播流水
基础代码中,panel 分解完成后才会执行 panel 广播,计算与数据传输串行,并且一次性数据传输较大,传输时
间较长.通过观察可以看出,left-looking 算法中,左侧 subpanel计算完成后,主体部分不再变化,后续只有发生行交
换的数据变化.
因此,提出一种广播流水算法,对已分解的 subpanel 数据提前发起广播,这种情况下,panel 数据广播与后续
panel 分解计算并行.采用广播流水算法,panel 计算完成后,只需要传输最后的 subpanel 和行交换发生变化的数
据,相比于传输整个 panel 数据,缩短了传输时间.
广播流水算法与 GPU 加速 panel 分解 DGEMM 协同使用,subpanel 的数据广播与 panel 加速 DGEMM 过程
中的 CPU 与 GPU 之间数据传输、GPU 执行 DGEMM 计算并行,充分利用系统的 CPU、GPU、PCIe 和网络接
口资源.
HPL 包含的 6 种广播算法都可以使用广播流水优化.
第 5.1.2 节描述的 GPU 加速 panel 分解 DGEMM 和 panel 广播流程紧密耦合,表 3 给出了优化前后伪代码
对比.