Page 53 - 《软件学报》2021年第8期
P. 53
孙乔 等:面向异构计算机平台的 HPL 方案 2335
3.2 Hetero-HPL操作映射
在 Update 阶段,HPL 算法主要涉及 3 种操作:(1) (分布式)行交换;(2) 上三角矩阵更新 dtrsm;(3) 尾子
矩阵乘更新 dgemm.而在具有多设备的异构众核平台上,数据在 Host 及 Device 之间数据一致性也需要通过
数 据传递 来实 现 . 因此 , 我们 在 MD_Mapping 框架 上实现 了 MD_Primitive 库 .MD_Primitive 层以
MD_Mapping 提供的子矩阵描述符为操作对象,调用所有相关协处理器协同(并行)完成施加于目标子矩阵
的操作,如数据传递,三角矩阵更新和矩阵乘更新等.另外,MD_Primitive 中的函数调用接口皆为异步接口,
可以方便实施多操作重叠执行.在具备 MD_Mapping 框架及 MD_Primitive 库之后,Hetero-HPL 的大致程序
结构如图 6 所示,其中,绿色字体代表同步调用,红色字体代表异步调用.
在整体算法开始之前 ,MD_Mapping 已经完成了对初始系统 Ax=b 的映射 , 生成映射实例
MatrixMapping.由于 Hetero-HPL 主要对 HPL 算法的 Update 阶段进行了重构,因此我们围绕 Update 阶段进
行阐述,其伪代码如图 6 左侧所示.通过 MatrixMapping 实例,程序获取两个子矩阵描述符(第 3 行~第 6 行),
分别为 NextPanel(下一 Panel)及 TrailingMatrix(尾子矩阵).这两个子矩阵实例的实际数据分布细节被
MD_Mapping 框架屏蔽.MD_Mapping 为每个设备预留了数据缓存 L(可进一步划分为 L1 和 L2)用来放置分
解完毕的 Panel 数据.各个子矩阵实例可按需要分配属于自身的 Device 端数据缓存 U.数据缓存 L 及 U 将
在接下来的步骤中使用,包括行交换(第 11 行及第 18 行),上三角矩阵更新(第 12 行及第 19 行)和矩阵乘更
新(第 13 行及第 20 行).这些步骤由 MD_Primitive 库中函数实现.我们将施加于 NextPanel 的所有运算完成
之后,开启异步传输(第 15 行),从对应的设备上将 NextPanel 的数据拷贝回 Host 端内存,进而完成下一次
Panel 分解操作.与此同时,对 TrailingMatrix 的上三角矩阵更新及矩阵乘更新可以通过异步接口与下一次
Panel 分解并行执行,如图 6 右侧所示.
Fig.6 Pesudo-code of Hetero-HPL based on MD_Mapping and MD_Primitive
图 6 基于 MD_Mapping 及 MD_Primitive 实现的 Hetero-HPL 伪代码
4 面向异构平台的实现及优化
4.1 突破锁页内存分配大小限制
在现在主流异构平台上,Host 端内存和 Device 端协处理器内存的数据交换主要通过 PCI-e 总线完成.若
要尽可能充分地利用 PCI-e 总线的带宽(约 32GB/s,全双工)则需要在 Host 端开辟锁页内存(pinned memory).
锁页内存的最大特点是其不会被操作系统换出到硬盘交换区,以便于设备端建立物理地址映射,因此对协处
理器来说可以通过 DMA 机制高速访问.相比于以常规方式申请的内存空间来说,锁页内存能够拥有 2~3 倍的