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%.
   15   16   17   18   19   20   21   22   23   24   25