Page 17 - 《软件学报》2021年第8期
P. 17
蔡雨 等:异构 HPL 算法中 CPU 端高性能 BLAS 库优化 2299
进行多线程并行的控制,甚至是多个维度同时并行.这种统一结构的便利性的代价就是在所有能够发生并行的
地方设置同步屏障(barrier),以便在当前 loop 的下层所有操作全部返回后才能继续回溯.虽然文献[7]中的性能
测试结果表明 control-tree 结构的开销是非常小的,但在异构 HPL 环境中,control-tree 的开销变得尤为突出.BLIS
原生 control-tree 的结构大致如图 7 所示.
Fig.7 Original BLIS GEMM control-tree
图 7 BLIS 原生 GEMM control-tree
对于异构 HPL 中的 GEMM 运算,我们选择只在 loop3 处(M c 维度)实现并行,当各个线程的 A c packing 打包
操作和后续操作都完成后,需要在 loop3 的 I c barrier 处进行第 1 次同步,随后的 P c barrier 和 global barrier 处再
次进行同步,才可以保证最终 GEMM 运算的正确性.可以看到,P c barrier 和 global barrier 的同步开销其实是可以
避免的,只需将 loop3 放到算法的最前端,然后使用 OpenMP 自身的同步操作实现各个线程的同步即可.基于此
分析,对 GEMM 运算的 control-tree 结构做出了如图 8 所示的调整.
通过异构 HPL 的实际测试,未优化 control-tree 时 DGEMM 和 DTRSM 运算的同步 barrier 等待的时间开销
为 2.29s,约占 CPU 端计算总时间的 20%.优化 control-tree 结构后,GEMM 函数同步 barrier 的等待时间减少为
1.49s,TRSM 运算应用类似于优化思路,同步 barrier 的等待时间减少到基本可以忽略不计.