Page 10 - 《软件学报》2021年第8期
P. 10

2292                                   Journal of Software  软件学报 Vol.32, No.8,  August 2021

                 调用次数.针对这些函数,本文应用多种优化策略对 BLIS 库中的各级 BLAS 函数进行了优化,获得了性能的大幅
                 度提升,提高了异构 HPL 的效率,更好地发挥了异构系统的性能.
                 1.2   异构单元处理器概述
                    异构计算单元 CPU 是 64 位 X86 架构的通用服务器芯片,采用 14nm 工艺制造.从图 1 中可以简单地了解
                 CPU 架构,共 32 个计算核心.其基本的微体系结构如下:
                    (1)  支持所有标准 X86 指令集,如 AVX、AVX2、SMEP、SSE 和 SSE2 等.
                    (2)  每 4 个核心组成一组,每个核心独享 L1 和 L2 级缓存,共享 L3 级缓存,支持 SMT 技术,每个物理核心支
                 持同步 2 线程.
                    (3)  三级缓存结构如图 2 所示,L1 cache 由 64K 指令缓存和 32K 数据缓存组成,其中 L2 cache 大小为 512K,
                 共享 L3 cache 大小为 8M.所有 Cache line 大小为 64 字节.
                    (4) X86 处理器有三级指令 TLB 和两级数据 TLB.访存页面大小为 4KB,映射的物理地址空间最大可以达
                 到 1GB.























                                                 Fig.2    CPU cache hierarchy
                                                  图 2   CPU 缓存层次结构
                 2    访存优化

                    HPL 算法中 DGEMM 运算占据了 BLAS 运算中最大的计算量和访存耗时.优化的 HBLIS 通过实现互补的
                 两类 GEMM kernels 优化了 DGEMM 性能,即大 kernel 和小 kernel.大 kernel 用于处理矩阵 A 和 B 的规模都相
                 对较大的情况,而小 kernel 用于处理矩阵 A 更加“高窄”和矩阵 B 规模较小的情况.在 DGEMM 函数接口内根据
                 矩阵规模切换两类 kernel.同时引入 Auto-tuning 自适应调优技术对矩阵分块参数进行优化,优化后的分块参数
                 可以更充分地利用 CPU 缓存,提高 cache 命中率,从而提高 DGEMM 访存性能.

                 2.1   矩阵分块
                                                             [8]
                    GEMM 大 kernel 采用经典高效的 GEMM 分块算法 ,如图 3 左侧的 6 层循环伪代码所示;GEMM 小 kernel
                 的算法如图 3 右侧的伪代码所示.
   5   6   7   8   9   10   11   12   13   14   15