Page 42 - 《软件学报》2021年第8期
P. 42
2324 Journal of Software 软件学报 Vol.32, No.8, August 2021
行在其他两个国产处理器物理核心上.除线程 0 外,每个线程管理各自的异步流.通过利用线程间同步和流之间的
同步来协调国产处理器与国产加速器的计算,最终实现了如图 3 所示的流水线.
Fig.3 HPL multithread fine-grained parallel algorithm flow
图 3 HPL 多线程细粒度并行算法流程图
3.2 多线程细粒度HPL算法的实现
我们通过引入简单的生产者消费者模式来维护细粒度算法的依赖关系,以降低多线程带来的开销,实现与文
献[17]中做法一致.如图 4 所示,行交换生产者做完一个列块的行交换之后,生成一个更新任务放到更新任务队列
里边;负责尾矩阵更新的线程作为消费者,取出更新队列里面的
任务并执行,同时尾矩阵更新线程还是传输任务的生产者,在执
行完一个更新任务后,生成一个传输任务放到传输任务队列里
边;负责传输的线程从传输队列里取任务完成传输;负责 panel
分解的进程在等待自己需要的列块数据更新完成之后就可以并
行开始做下一轮的panel分解 [17] .各个线程间利用信号量实现等
待和唤醒,当任务队列为空的时候,相应线程就挂起,避免忙等
待带来的开销.
异构系统的加速器有多种,比如 GPU、MIC、FPGA、国
产加速器等等.为了让异构 HPL 算法具有可移植性,能够运行
在多种异构平台上,我们完成了一个轻量级的异构加速框架
HPCX [17] .其实现与文献[17]一致,如图 5 所示,我们抽象出了异
构加速平台的一些共有特性,比如内存管理,并行计算,数据传
输,异步调用等等.同时我们对不同厂商的异构加速器编程模
型和基础数学库进行总结,定义了一套统一的编程结构.在不
同的加速器上,使用不同的编程模型(HIP、CUDA、C)实现,
底层用不同的编译器编译成不同平台上的二进制程序.目前
HPCX 支持国产加速器、AMD GPU 和 NVIDIA GPU 以及国
Fig.4 HPL producer-customer model
产处理器、Intel CPU 和 AMD CPU.对于其他异构加速器,结合
图 4 HPL 生产者消费者模型
硬件平台给出 HPCX 定义抽象接口的具体实现就可以方便整
理到 HPCX 框架中.异构并行 HPL 算法通过调用 HPCX 提供的编程接口实现跨平台加速.