Page 67 - 《软件学报》2021年第8期
P. 67
刘芳芳 等:国产异构系统上的 HPCG 并行算法及高效实现 2349
6.3 其他优化
分块后,块内的数据存在可能的复用,本文可以通过 GPU 卡上的程序员可控高速缓存 LDS 来完成这部分的
复用,从而进一步提高访存的效率.
除此之外,本文还运用了多种优化手段,如分支消除、循环展开、数据预取、数据管理优化等.在分支消除
方面,考虑到 GPU 的分支执行特性,本文通过逻辑计算来消除了一些分支指令.在循环展开方面,综合考虑寄存
器的数量与性能,本文展开了一些热点函数中的循环.在数据预取方面,本文在计算时先统一预取不规则的内存
区域中的数据.数据管理方面,本文采用了内存池的方式对内存进行管理,避免了很多不必要的内存申请与释放,
并且在主存分配空间时都声明为 pinned memory 以加速数据拷贝.
7 多进程实现与优化
在多进程的实现中,本文采用了内外区划分的方式,将整个计算网格分成内区和外区两个部分,外区宽度为
1,如图 8 所示.将内区按照第 4 节中算法进行着色,将外区看成最后一个颜色.当内区部分所有的计算和外区所
需的 halo 区数据通信都完成后开始进行外区的计算.具体流程如图 12 所示.这样整个 HPCG 中核心函数 SpMV、
SymGS 中的邻居通信均可被内区计算掩盖,从而减少了整体运行时间.
由于矩阵、向量等常驻 GPU 设备内存,邻居通信前需要将 halo 区的数据先拷贝回 CPU 内存,待通信结束
后再拷贝到 GPU 内存.第 1 次拷贝是无法重叠的,因为只有等完全拷贝结束后才能进行邻居通信.
Fig.12 Overlap of computation and communication
图 12 计算通信重叠
8 HPCG 测试结果
本文对第 3.1 节和第 3.2 节的算法均进行了实现,并基于某国产复杂异构超级计算机单节点单进程进行了
测试,测试结果如图 13 所示.图 13 中给出了 HPCG
参考版、两个并行方案的性能结果,对第 2 个方案,
还给出了多个优化技术所带来的性能提升.从图
中可以看出,第 3.2 节算法性能较高(见图中 para2),
约是第 3.1 节算法(见图中 para1)的 2 倍多,因为第
3.2 节算法能更好的发挥 GPU 的计算能力,并行度
更高.图中 opt1 是将 setup 部分和 OptimizeProblem
部分进行优化的结果,同时该版本还减少了不必
要的同步操作,opt2 是对多重网格中每一层的着
色方案进行自适应调整,以增加粗层的并行度,另
外该版本中还包括对零元访存的优化.opt2 版本
的性能是本文工作单节点可达到的最高性能,在
Fig.13 HPCG performance using single process
做完内外 区 划分后 , 该性 能有所下降 , 见图中
图 13 HPCG 单进程性能
inner-outer 部分.