Page 8 - 《软件学报》2021年第8期
P. 8
2290 Journal of Software 软件学报 Vol.32, No.8, August 2021
学库.随着不断的发展完善,BLAS 在高性能计算、科学和工程领域都得到了广泛的应用.由于不同厂商、不同
体系结构下的 CPU 差异较大,通用 BLAS 函数库不能达到很好的性能.因此,在大规模矩阵运算时,针对不同
CPU 的架构特点来优化 BLAS,可以充分发挥处理器的计算性能,从而使计算效率大大提升.目前主流的 BLAS
分为专用和通用两种.专用型 BLAS 是由特定的 CPU 公司开发,针对特定平台芯片进行代码优化,极大地提高了
性能,Intel 的 MKL 和 AMD 的 ACML 就是此种类型.通用 BLAS 由非盈利机构开发,不同平台都可以对开源代
[1]
码进行优化,最具代表性的是 ATLAS 、GotoBLAS [2,3] 和 OpenBLAS [4,5] .
BLIS(BLAS-like library instantiation software)数学库是美国 Texas 大学超算中心高性能组开发的开源架构,
是在 GotoBLAS 的基础上进行了改写和优化,具有可移植性、易用性和模块化设计易于开发的特点,支持混合
[6]
类型矩阵存储和多线程 .文献[7]提出了 BLIS 架构,并做了全面的介绍;文献[8]研究了如何使用 BLIS 在通用、
低功耗和多核架构中实现高效的 level-3 级 BLAS 函数;文献[9]系统地探讨了矩阵乘法算法在 BLIS 五层循环中
并行化的机会.BLIS 具有的这些特性使其更容易针对具体平台进行 BLAS 优化开发.BLAS 包含三级函数,分别
为第 1 级向量与向量计算,第 2 级向量与矩阵计算,第 3 级矩阵与矩阵的计算,其中第 3 级函数 DGEMM 计算量
最大,可以达到理论计算量的 95%以上 [10] ,因此三级函数的优化是性能提升的关键.
高性能计算系统可以分为同构或异构两类,同构系统是由大量 CPU 构建,计算和数据处理都在 CPU 上进
行;异构系统是 CPU 和加速部件组成,加速部件一般由 Cell(cell broadband engine architecture)、FPGA(Field
programmable gate array)和 GPU(graphic processing unit)等为代表,集成大量的浮点计算单元的同时舍弃了一些
CPU 上复杂的控制单元.异构系统中 CPU 负责任务调度和简单计算,主要计算在加速部件上进行,计算能力更
强.国际上对高性能系统的评测标准程序是 HPL(high performance Linpack),由美国田纳西大学教授 Dongarra 设
计提出 [11] ,是在高性能计算系统中使用高斯消元法求解一个随机的 N 元一次线性方程组问题,用以评价高性能
计算机的浮点性能.
异构 HPL 浮点计算在 CPU 端是通过 BLAS 函数完成的,BLAS 库的性能会影响整体系统性能.本文异构系
统计算单元由 CPU+协处理器(co-processor)组成(如图 1 所示).CPU 计算核心之间和协处理器通过高速互联进
行数据交换和通信.协处理器的计算能力一般都比通用 CPU 强大很多,往往造成计算负载严重不均衡,损失性
能.因此在 CPU 端利用更高效的数学库,能够充分地发挥 CPU 性能,使负载更均衡,是提高计算能力的可行方式
之一.文献[12−15]分别针对 ARM 架构处理器以及异构平台的 GEMM 优化做了深入研究.文献[16,17]研究了在
申威众核处理器上,1 级、2 级和 3 级 BLAS 的优化方法,文献[18]对异构多核平台上的数学库寄存器分配优化
方法进行了研究.
Fig.1 Heterogeneous computing node architecture
图 1 异构计算节点架构