Page 31 - 《软件学报》2021年第8期
P. 31
黎雷生 等:复杂异构计算系统 HPL 的优化 2313
4.2 行交换连续流水线算法
矩阵行交换的前提是已接收 panel 分解计算的行交换索引数据(包含在 panel 广播数据中),并且上一次迭代
矩阵更新已完成.HPL 基础代码中,行交换完成后启动矩阵更新计算,如果采用这种算法,GPU 在行交换执行的
过程是空闲的.文献[6]提出行交换流水线算法优化行交换流程.在使用 GPU 的环境,也可以采用这一算法.使用
行交换流水线算法,对矩阵更新的行分段,首先执行第 1 段的行交换,然后 GPU 执行第 1 段的矩阵更新,同时执
行第 2 段的行交换,依次类推.采用这种算法,GPU 计算与行交换数据传输重叠执行,减少了 GPU 的空闲时间.但
是,单步循环执行第 1 段行交换的这段时间内 GPU 是空闲的.
为了避免 GPU 等待,提出了连续流水线算法.算法中,第 1 个分段完成上一次循环矩阵更新和当前进程接收
到下一次循环的行交换信息之后,不需要等待上一次循环矩阵更新全部完成,就执行第 1 分段的下一次循环的
行交换.采用这种算法,下一次循环第 1 分段的行交换被上一次循环矩阵更新隐藏,下一次循环第 1 分段的矩阵
更新隐藏第 2 分段的行交换,后续分段继续流水.
使用连续流水算法避免单步循环的流水线启动过程,如果接收到行交换信息早于矩阵更新,则 GPU 可以一
直处于工作状态.从第 3.4 节可以看出,行交换信息在平衡点之前是早于矩阵更新的,而这一阶段正是浮点运算
量较大的情况,在这一阶段充分发挥 GPU 计算能力,可以提高整体的计算效率.
行交换分段方法选择倍数递增,也就是第 2 段列数是第 1 段列数的倍数,依次类推,增长因子可调. 连续行
交换流水算法下实现 look-ahead 算法,对于当前 panel 分解,增加 panel 分解数据提前行交换和矩阵更新的分段.
5 基础模块性能优化
从平衡点理论来看,平衡点之前的部分 GPU 计算时间可以隐藏 panel 分解和行交换时间.随着计算的推
进,panel 分解和行交换成为系统性能的瓶颈.为了进一步提高效率,需要针对 panel 分解和行交换进行优化.
5.1 Panel分解优化
5.1.1 基本参数调优
Panel 分解浮点计算集中在 BLAS 函数,使用针对目标系统优化的 Hygon OpenBLIS 库.Panel 分解使用递归
算法,中间递归层次的浮点运算集中在 BLAS 的 DTRSM 和 DGEMM 两个函数.当递归层次包含的列数小于等
于阈值时,使用非递归算法,浮点运算集中在 BLAS 的 DGEMV、DTRSV、DSCAL、IDAMAX 等函数.对于每
一列的 LU 分解,需要通过交换和广播通信主元所在的 panel 行,并记录主元行交换信息.交换和广播通信使用
binary-exchange 算法.
Panel 分解计算有关参数有 NB、NBMIN、PFACT、RFACT、DIV 等.NB 取决于 GPU 执行矩阵更新的效率,
同时考虑 CPU 与 GPU 计算的平衡.当节点规模较小时,NB=384;当节点规模较大时,NB=256.通过参数调优,选
择优化的参数组合,见表 1.
Table 1 Parameters of panel factorization
表 1 Panel 分解参数
参数 值
NB 384 或 256
NBMIN 8
PFACT Left
RFACT Left
DIV 2
进一步分析 panel 分解各部分时间,0 号进程主要计算函数时间见表 2.