Page 20 - 《软件学报》2021年第8期
P. 20
2302 Journal of Software 软件学报 Vol.32, No.8, August 2021
M =28=4 (thread) 6 1T × + T × 4 5T= × 5 3T+ × 1 (5)
不同的求解方法涉及同一个函数的不同 kernel 函数编写以及动态多线程 threshold 的选取.通过实际测试
发现:DGEMM 运算在 M 较小时,更多的循环展开比更多的线程性能要好,如图 11 所示.
Fig.11 In the case that B matrix is square matrix (dimension N=K), more unrolling is better performance
than more threading in small DGEMM
图 11 B 矩阵是方阵(维数 N=K)的情况下,在小规模的 DGEMM 中,
更多的循环展开比更多的线程性能更优
5 性能测试与分析
异构 HPL 算法中综合使用了以上介绍的访存优化、指令集优化和多线程并行等优化技术,对算法中调用
的 7 个 BLAS 函数进行了针对性优化,并与 OpenBLAS 0.3.6 和 MKL(Intel Math Kernel Library 2018.0.128)进行
了对比测试.实验测试平台是高性能计算集群系统中的单个计算节点,其配置是如图 1 所示的 32 核 X86 CPU 与
4 个协处理组成的异构计算单元.在测试平台上分别进行了单核 DGEMM 和多核心并行 DGEMM 测试,最后测
试了异构 HPL 程序.
5.1 Cache性能分析
通过系统性能分析工具读取 CPU 中各种计数器的数值,可以分析应用程序的各项指标.X86 处理器支持非
常多的性能监控计数器,包括浮点、访存、指令等 CPU 各种资源的监控.如表 2 所示为 Auto-tuning 优化后的矩
阵分块参数与初始分块参数进行 DGEMM 计算时的 cache miss 对比情况,分析得出分块参数[m c ,k c ,n c ]从
[1080,120,8400]优化为[792,822,8628],k c 和 n c 的增大导致矩阵打包到 L1 缓存时,因 L1 容量小而发生更多的
cache miss.但是,L2 和 L3 缓存容量比 L1 大得多,其命中率的提高可以掩盖 L1 的性能损失并提高整体 DGEMM
的性能.
Table 2 Cache miss rate of HPL counted by performance monitor unit
表 2 通过性能监控单元统计 HPL 的缓存失效率
cache 初始分块参数 优化分块参数
L1 miss rate (%) 6.90 17.20
L2 miss rate (%) 8.76 4.41
L3 miss rate (%) 8.05 2.43
5.2 DGEMM效率
如图 12 和图 13 所示分别为单核和 32 核情况下不同数学库的 DGEMM 性能对比.因为 Intel MKL 只有在
Intel 平台上才能发挥最佳效果,在 X86 异构平台上效率不是最好,仅作为参考;而 Netlib 为未经过任何优化的
Fortran 语言实现的通用标准数学库.可以看到,HBLIS 的 DGEMM 实现无论是在单核心还是在 32 核心下,其性
能均超过了其他 BLAS 库,单核 DGEMM 最高效率达到了 98%,32 核最高效率达到了 96.9%.与未优化前的 BLIS
和 MKL 相比,单核性能分别提升了 19.2%和 33.3%,32 核性能分别提升了 42.1%和 33.6%.