论文部分内容阅读
基础线性代数库(BLAS)是一组线性代数核心子程序的集合,主要包括向量与矩阵的基本运算,被广泛应用于科学工程计算领域。在高性能计算领域中被广泛采用的LINPACK性能测试程序中大量使用了3级BLAS的GEMM函数,3级BLAS函数的优化工作始终是高性能领域的热点之一。随着目前高性能计算需求的日益增大,越来越多的应用开始登陆国产高性能计算平台,不论是传统的科学计算领域还是新兴的机器学习、人工智能等领域,均严重依赖底层诸如BLAS数学库以获得较高的计算性能。然而目前,在飞腾、神威等多款国产高性能计算平台上,均没有部署定制化的高性能BLAS数学库,开源的数学库性能又往往不尽如人意,因此研究基于国产平台的高性能BLAS数学库,特别是3级BLAS函数的高性能实现方法具有重要意义。 BLAS3级函数涉及矩阵-矩阵操作,访存复杂度为O(N2),计算复杂度为O(N3),在矩阵规模合理的情况下计算规模远大于访存规模,利用计算掩盖访存延迟是可行的,3级BLAS函数性能理论上可以接近平台性能峰值。由于通用编译器优化力度不够,在3级BLAS函数的实现过程中,往往需要考虑平台架构特征进行指令级手工汇编编码。 本文面向两款架构特征完全不同的国产处理器平台,基于不同的平台特性,分别研究并实现了高性能的BLAS数学库。本文的主要贡献包括: 分析一款国产的众核异构平台体系结构,详细介绍了其从核阵列、从核缓存LDM、主从核间的高性能DMA传输机制以及从核阵列间的寄存器级通信技术。基于单个计算核心,利用平台的SIMD向量化乘加指令,设计了循环展开策略与软件流水线排布方法,使用了高效的寄存器分块模式,实现函数优化。基于众核平台,设计了计算与访存异步的双缓冲策略,描述了矩阵分块与核间数据划分方法,使用寄存器级通信,实现高性能3级BLAS函数。经实验,该高性能BLAS数学库的GEMM函数性能可以达到平台峰值的90%以上,与单核GotoBLAS相比,加速比达到270倍左右。 分析了申威1600 CPU平台特征,基于该平台单核,使用了SIMD向量化乘加指令、寄存器分块、循环展开与软件流水线、数据预取与数据重排等技术,单线程条件下相比于GotoBLAS GEMM函数,本文所述的GEMM平均加速比为4.72,最高加速比为5.61。基于平台多核,进行优化设计工作,4线程下的平均加速比为3.02,最高加速比为3.18。