编辑推荐:
通用矩阵乘法(General Matrix Multiplication,GEMM)被广泛认为是众多应用领域中的基础核心计算内核。复数具有独特的数学性质,使其能够广泛应用于工程计算场景,包括信号处理与信号变换。本研究针对神经处理器(NPU)硬件上的高效复数通用
通用矩阵乘法(General Matrix Multiplication,GEMM)被广泛认为是众多应用领域中的基础核心计算内核。复数具有独特的数学性质,使其能够广泛应用于工程计算场景,包括信号处理与信号变换。本研究针对神经处理器(NPU)硬件上的高效复数通用矩阵乘法(CGEMM,即complex-valued GEMM)开展研究,从而将NPU的应用范围拓展到主流低精度人工智能计算负载之外。本研究的主要贡献如下:(i)分析了昇腾NPU上3M与4M分解方案的数值精度与硬件利用率,并在本文测试的硬件约束下选定4M方法作为CGEMM的优选实现,以适应现代加速器带宽受限条件下对精度敏感和性能关键的矩阵计算场景;(ii)提出了一种面向昇腾NPU、基于4M方案的完整高性能CGEMM设计,并构建了AIC/AIV双流流水线调度策略,用于协调多级存储层次与计算单元之间的padding操作、矩阵-矩阵乘法以及逐元素指令;(iii)实现了一种细粒度任务调度与分配机制,以在不同矩阵维度下最大化Cube核心占用率,从而提升多种计算负载下的硬件利用效率。实验测量结果表明,所提出的CGEMM在全部测试矩阵配置上实现了83.6%的竞争性硬件利用率,能够高效挖掘可用计算资源。同时,在本文实验采用的相同昇腾NPU上,相较于AscendSipBoost实现,其平均测得加速比为1.14×;相较于实验中采用的Nvidia GPU平台上的cuBLAS,在所有评估矩阵规模下测得加速比为3.17×。这些结果表明,在本文测试实验设定下,昇腾NPU具备支持高精度复数值计算负载的良好潜力。
该文发表于《Computers》,聚焦于昇腾神经处理器(NPU,面向深度学习加速的专用处理器)上复数通用矩阵乘法(CGEMM,complex-valued General Matrix Multiplication)的高效实现问题。通用矩阵乘法(GEMM)长期以来都是高性能计算与人工智能系统中的基础算子,而复数矩阵乘法又是短时傅里叶变换(STFT,short-time Fourier transform)、相控阵雷达(PAR,phased-array radar)、多输入多输出(MIMO,multiple-input multiple-output)传输和正交频分复用(OFDM,orthogonal frequency division multiplexing)传输等任务中的关键组成部分。然而,现有NPU体系结构主要围绕低精度人工智能负载设计,对于高精度复数计算支持不足,尤其在数值稳定性、带宽限制、片上与片外数据搬运协调以及不同矩阵规模下的计算单元占用率方面存在明显短板。因此,开展面向昇腾NPU的CGEMM优化研究,不仅具有方法学意义,也具有拓展NPU应用边界的重要价值。
围绕这一问题,研究人员系统比较了复数矩阵乘法常用的3M与4M两种分解策略,并结合昇腾NPU的硬件结构特征,对两种方法的精度、性能与硬件利用特征进行了联合分析。研究显示,尽管3M方法在理论上以较少的矩阵乘法次数降低了浮点运算复杂度,但其通过复用中间项实现降算的机制会加剧舍入误差传播,并且在现代加速器片外带宽受限的情况下,其额外的数据搬运开销会抵消理论计算优势。相比之下,4M方法通过四次彼此独立的实矩阵乘法完成复数乘法映射,具备更好的数值稳定性,并更适应昇腾NPU中Cube计算单元与Vector计算单元分离、且依赖全局存储器(GM,global memory)进行数据交换的架构特征。基于这一判断,研究人员选择4M作为本文CGEMM实现的核心方案,并围绕其构建了完整的高性能内核设计。
在技术实现上,研究人员首先基于昇腾NPU的AIC/AIV双执行流机制设计了流水化调度框架。其中,AIC流主要承担Cube单元上的密集矩阵-矩阵乘法,AIV流负责Vector单元上的复数实部与虚部分离、逐元素标量乘、逐元素累加以及复数重组等操作。为了进一步降低同步代价,研究还引入基于原子指令(atomic instructions)的流水优化,用于支持虚部聚合过程中的安全累加,避免竞争条件并减少额外同步。除此之外,针对通信与信号处理场景中矩阵尺寸差异较大的现实特点,研究人员提出了细粒度任务调度与分配机制。该机制将矩阵乘法划分为更细的任务块,并按Mission Index顺序向可用Cube单元连续派发任务,从而在小M、小N等容易导致硬件空闲的情况下提升Cube单元占用率。综合实验表明,该方法不仅在平均性能上优于对比实现,也使硬件利用率保持在较高水平,说明其对复杂值高精度计算任务具有现实部署潜力。
研究所采用的主要技术方法可概括为以下几个方面。其一,基于3M与4M分解公式构建昇腾NPU上的CGEMM基础实现,并通过与CPU上Python 3.11和NumPy 1.26.4生成的FP32参考结果对照,采用最大相对误差、最大绝对误差、平均相对误差和平均绝对误差评价数值稳定性。其二,结合昇腾NPU的Cube、Vector、多级缓冲区与MTE(Memory Transfer Engine)数据搬运机制,构建AIC/AIV双流流水线。其三,利用原子指令优化逐元素累加过程。其四,在Huawei Atlas 300T Pro Training Card平台上,对不同M、N、K组合进行重复测试,并与同平台AscendSiPBoost中的asdBlasCgemm以及Nvidia A800 GPU上的cuBLAS进行对比评估。
在研究结果部分,论文首先在“2. Background”中建立了方法与硬件分析基础。该部分说明了标准GEMM的分块与累加计算模式,系统给出了3M与4M两种复数矩阵乘法分解形式,并指出3M依赖中间项复用,运算次数更少,但可能引入更严重的精度损失;4M虽然需要更多矩阵乘法,但乘法路径独立,更利于并行化且数值更稳定。与此同时,文章还介绍了昇腾NPU的体系结构,包括Cube算术单元、Vector算术单元、共享L2缓存、全局存储器以及多种MTE模式,为后续设计选择提供了硬件依据。
在“3. Design of CGEMM on Ascend NPU: 3M and 4M Method Selection”中,研究人员围绕3M与4M的适用性进行了核心论证。在“3.1. Numerical Precision Comparison”中,研究人员通过控制实验比较两种方法在不同K维累加长度下的误差表现。实验将M和N固定,并设置小规模输出矩阵与大规模输出矩阵两类典型情形,K从1扩展至32,768,以观察误差随累加深度增加的变化。结果表明,虽然4M在最大相对误差指标上略高,但这是由接近零的输出元素导致的相对误差放大现象造成,并不代表整体精度更差。从最大绝对误差与平均绝对误差来看,4M均优于3M,显示出更好的整体数值稳定性;且当K达到32,768时,4M的平均绝对误差仍保持在较低水平,满足工程应用需求。
在同一节的“3.2. Performance and Hardware Utilization Analysis”中,研究人员进一步分析了理论时钟周期、算术复杂度与片外数据传输代价之间的关系。研究指出,尽管在大尺寸矩阵下3M的理论运算量更低,但现代AI加速器通常受限于片外带宽而非片上算力。由于3M需要引入额外中间矩阵并增加全局存储器数据传输,实际运行时间往往高于4M。基于Ascend硬件实测结果,4M在几乎所有M、N、K组合下都优于3M,平均加速达到1.18×,且矩阵规模越大,其优势越明显。由此,研究人员确定4M为本文测试昇腾NPU上的优选CGEMM实现方案。
在“4. CGEMM Optimization for Ascend NPU”中,论文详细介绍了针对4M方法的两类关键优化。在“4.1. Pipelining Optimizations Using Atomic Instructions”中,研究人员说明了如何在AIC/AIV双流框架下,将实虚部分离、四次矩阵乘法、中间结果累加和复数重组有机串联起来,并利用原子指令完成虚部聚合中的逐元素累加,以减少同步等待和Vector侧额外负担。这说明优化重点不仅在于提高计算本身效率,也在于改善异构计算单元之间的协同。在“4.2. Fine-Grained Task Scheduling and Assignment”中,研究人员提出细粒度任务分派机制,以解决小矩阵情况下Cube单元难以充分占用的问题。通过将不同矩阵乘法块作为独立任务并持续派发到空闲Cube单元,该机制减少了计算轮次,提高了总体资源利用率,适用于多种尺寸范围的CGEMM任务。
在“5. Evaluation”中,研究人员对提出方法进行了系统评估。“5.1. Effectiveness of Pipelining Optimizations Through Atomic Instructions”表明,引入原子指令后,同步开销得到缓解,在不同矩阵尺寸下可获得最高1.05×、平均1.02×的加速,证明流水线优化具有实际收益。“5.2. Effectiveness of Fine-Grained Task Scheduling and Assignment”则显示,在关闭原子指令的条件下,细粒度任务调度机制依然能显著改善性能,尤其对于小M、小N矩阵,其最高加速可达2.18×,在多种矩阵配置上的平均加速为1.32×,验证了该机制对提升Cube单元占用率的有效性。“5.3. CGEMM Performance Evaluation”给出了整体性能结果。在同时启用流水优化与任务调度机制后,研究人员在2500组随机生成的合成CGEMM测试中,对提出实现、AscendSiPBoost中的asdBlasCgemm以及Nvidia A800 GPU上的cuBLAS进行了比较。结果表明,本文方法相较asdBlasCgemm实现了平均1.14×的稳定加速,并且性能波动更小;相较实验条件下的cuBLAS实现,实现了3.17×的测得加速。在硬件利用率方面,cuBLAS的平均利用率为94.5%,而本文方法在不同矩阵配置下达到83.6%的硬件利用率,说明其虽仍存在差距,但已能够较高效地利用底层计算资源。
论文讨论部分的核心在于,研究人员并未将理论运算量降低直接等同于实际性能提升,而是从现代AI加速器“算力充足、带宽受限”的现实约束出发,对3M与4M进行了面向架构特征的重新评估。研究表明,在昇腾NPU这类依赖全局存储器进行不同计算单元间交换的架构上,减少片外数据搬运往往比减少理论乘法次数更关键。同时,复数矩阵乘法由实部、虚部拆分与重组构成,天然涉及多种逐元素操作与矩阵乘法混合执行,因此单纯优化某一类指令并不足以获得稳定收益,必须将数据搬运、流水并行、同步机制和计算核心占用率纳入统一设计。这一讨论说明,面向NPU的高精度复数计算优化,需要从“方法—硬件—调度”三个层面共同展开。
研究结论部分可译为:作为应用最广泛的高性能核心计算内核之一,GEMM在多个应用领域中具有关键作用。尤其是复数GEMM对于处理复数值矩阵运算不可或缺,而这类运算广泛存在于相关领域中,却长期未在传统上面向低精度人工智能计算设计的NPU硬件上得到充分优化。本研究通过探索并优化昇腾NPU上的高效CGEMM实现,填补了这一关键空白,从而将NPU的应用范围拓展到传统人工智能任务之外,并释放其在高精度复数值计算中的潜力。通过采用经本文测试昇腾NPU硬件架构验证的优选4M方法,并结合流水线优化以及细粒度任务调度与分配机制,所提出的CGEMM在相同测试昇腾NPU上相较AscendSipBoost实现获得了1.14×的平均测得加速,在本文实验采用的Nvidia GPU上的cuBLAS实现上获得了3.17×的测得加速,覆盖全部评估矩阵规模。同时,该方法在多样矩阵配置下实现了83.6%的较高硬件利用率,从而能够高效利用底层计算资源。这些结果不仅验证了所提优化策略的有效性,也为在复数值计算场景中充分释放昇腾NPU计算能力奠定了坚实基础,并为推动相关研究与产业应用提供了有价值的技术支持。