Batch Matmul算子特性分析_v0.2 #2

Closed
opened 2026-08-20 15:24:46 +00:00 by admin · 1 comment
Owner

Batch Matmul算子特性分析

1.1 算子功能与接口说明

算子功能:完成带batch的矩阵乘计算。

算子输入:
 左矩阵(也叫A矩阵):[BatchA,M,K]、数据类型dtype、layout(典型ND)
 右矩阵(也叫B矩阵):[BatchB,M,K]、数据类型dtype、layout(典型ND)
 偏置bias:维度固定[B,1,N]、数据类型dtype、layout(固定ND),可为空

算子输出:
输出矩阵(也叫C矩阵):[BatchC,M,N]、数据类型dtype、layout(典型ND)

计算公式:
C=A@B+bias

其中,A,B 输入维度典型为3维,最后两维做矩阵乘计算。例如,A,B 输入维度分别为(B,M,K)、(B,K,N) 时,C维度为 (B,M,N)。bias是维度为(B,1,N)的向量。其中,B为矩阵乘法的batch数,M为第一个张量A的行数和输出张量C的行数,N为第二个张量B的列数和输出张量C的列数,K为第一个张量A的列数和第二个张量B的行数。

1.2 BMM算子最优实现分析
算子性能最优的优化目标是总时延最短。
多核并行计算时延可以通过流水进行一定程度的掩盖,最终时延
T_total=max(T_MMAD, T_MTE2, T_MTE1, T_Fixpipe [, T_Reduce])
算子优化的关键是对瓶颈硬件时延的优化。
当MTE2硬件时延是瓶颈,MMAD计算硬件不是瓶颈时,甚至可以考虑牺牲一定MMAD时延(例如冗余计算)来换取瓶颈硬件MTE2的性能提升,来换取总时延最低的优化。
反之亦然,当MMAD计算硬件时延是瓶颈,MTE2硬件不是瓶颈时,甚至可以考虑牺牲一定MTE2时延(例如重复搬移)来换取瓶颈硬件MMAD的性能提升,来换取总时延最低的优化。

BMM算子在NPU上运行实现的本质是将参与计算的数据块分块(tile),由多核并行+串行完成这些分块(tile)的计算并组合成最终结果。

BMM分块的划分有4个维度(B,M,K,N)

这4个维度,从切分特征看,
只切B:
1、 每个数据分块都只会被固定的一个核读取,同一个数据分块不会被多个不同的核读取,核间不会重复读取同一数据分块
2、 每个最终输出数据块分块只由1个核独立完成,没有中间结果产生,也不依赖其他核

只切M或只切N:
1、 若是切M后左矩阵分块被分到不同核,则存在同一右矩阵分块被不同核(重复)读取;若是切N后右矩阵分块被分到不同核,则存在同一左矩阵分块被不同核(重复)读取;单核会读取多个数据块,单个数据块也可能会被多个不同的核读取;
2、 每个最终输出数据块分块只由1个核独立完成,没有中间结果产生,也不依赖其他核

只切K:
1、 每个数据分块只需要被固定的一个核读取,同一个数据分块不需要被多个不同的核读取,核间不会重复读取同一数据分块
2、 每个最终输出数据块不能只通过一个核的计算完成,单核存在中间结果的写出,需要与其他核的结果一起做Reduce才能产生最终输出数据分块

从完备性角度,所有可能的切分组合是这4个维度的任意非空子集,共2^4-1=15种
{B}、{M}、{K}、{N}、{B,M}、{B,K}、{B,N}、{M,K}、{M,N}、{K,N}、{B,M,K}、{B,M,N}、{B,K,N}、{M,K,N}、{B,M,K,N}

结合特征,将这些组合分成不同分支,不同分支的优化方案有所不同
只切B: {B},
无重复读,读写数据量固定,
当case是访存Bound时,优化目标是搬移效率要高,
当case是计算Bound时,优化目标是计算效率要高

切B\M\N:{M}、{N}、{M,N}、{B,M}、{B,N}、{B,M,N},
可能存在重复读,
当case是访存Bound时,优化目标是重复读尽量少,且搬移效率尽量高,
当case是计算Bound时,优化目标是计算效率要高

涉及切K:{K}、{B,K}、{M,K}、{K,N}、{B,M,K}、{B,K,N}、{M,K,N}、{B,M,K,N}
可能存在重复读,且可能存在写出中间量再读回AIV做Reduce再写出

当算子是计算Bound时,优化目标是总计算效率尽量高,且分块的多核并行计算所引入的额外MTE2、Fixpipe硬件时延不会成为新的瓶颈

由此引出第一个问题,如何分块,数据分块涉及核间分块、核内分块,

优先考虑核间分块问题,
核间分块有4个维度

BMM分块多核并行计算的本质是完成:
C[B,M,N]=∑A[B,M,Ki]@B[B,Ki,N]

算子时延主要受限于多核并行计算时的

对于并行计算的瓶颈时延的优化实现是BMM算子达成最优性能的关键

对于多核并行计算

要达成最短时延需要同时决策以下3个维度
软件实现分支选择:决定了核间切分和数据流组织方式
Tiling参数选择:决定了单核内的分块
Swizzle编排

Batch Matmul算子特性分析 1.1 算子功能与接口说明 算子功能:完成带batch的矩阵乘计算。 算子输入:  左矩阵(也叫A矩阵):[BatchA,M,K]、数据类型dtype、layout(典型ND)  右矩阵(也叫B矩阵):[BatchB,M,K]、数据类型dtype、layout(典型ND)  偏置bias:维度固定[B,1,N]、数据类型dtype、layout(固定ND),可为空 算子输出: 输出矩阵(也叫C矩阵):[BatchC,M,N]、数据类型dtype、layout(典型ND) 计算公式: C=A@B+bias 其中,A,B 输入维度典型为3维,最后两维做矩阵乘计算。例如,A,B 输入维度分别为(B,M,K)、(B,K,N) 时,C维度为 (B,M,N)。bias是维度为(B,1,N)的向量。其中,B为矩阵乘法的batch数,M为第一个张量A的行数和输出张量C的行数,N为第二个张量B的列数和输出张量C的列数,K为第一个张量A的列数和第二个张量B的行数。 1.2 BMM算子最优实现分析 算子性能最优的优化目标是总时延最短。 多核并行计算时延可以通过流水进行一定程度的掩盖,最终时延 T_total=max(T_MMAD, T_MTE2, T_MTE1, T_Fixpipe [, T_Reduce]) 算子优化的关键是对瓶颈硬件时延的优化。 当MTE2硬件时延是瓶颈,MMAD计算硬件不是瓶颈时,甚至可以考虑牺牲一定MMAD时延(例如冗余计算)来换取瓶颈硬件MTE2的性能提升,来换取总时延最低的优化。 反之亦然,当MMAD计算硬件时延是瓶颈,MTE2硬件不是瓶颈时,甚至可以考虑牺牲一定MTE2时延(例如重复搬移)来换取瓶颈硬件MMAD的性能提升,来换取总时延最低的优化。 BMM算子在NPU上运行实现的本质是将参与计算的数据块分块(tile),由多核并行+串行完成这些分块(tile)的计算并组合成最终结果。 BMM分块的划分有4个维度(B,M,K,N) 这4个维度,从切分特征看, 只切B: 1、 每个数据分块都只会被固定的一个核读取,同一个数据分块不会被多个不同的核读取,核间不会重复读取同一数据分块 2、 每个最终输出数据块分块只由1个核独立完成,没有中间结果产生,也不依赖其他核 只切M或只切N: 1、 若是切M后左矩阵分块被分到不同核,则存在同一右矩阵分块被不同核(重复)读取;若是切N后右矩阵分块被分到不同核,则存在同一左矩阵分块被不同核(重复)读取;单核会读取多个数据块,单个数据块也可能会被多个不同的核读取; 2、 每个最终输出数据块分块只由1个核独立完成,没有中间结果产生,也不依赖其他核 只切K: 1、 每个数据分块只需要被固定的一个核读取,同一个数据分块不需要被多个不同的核读取,核间不会重复读取同一数据分块 2、 每个最终输出数据块不能只通过一个核的计算完成,单核存在中间结果的写出,需要与其他核的结果一起做Reduce才能产生最终输出数据分块 从完备性角度,所有可能的切分组合是这4个维度的任意非空子集,共2^4-1=15种 {B}、{M}、{K}、{N}、{B,M}、{B,K}、{B,N}、{M,K}、{M,N}、{K,N}、{B,M,K}、{B,M,N}、{B,K,N}、{M,K,N}、{B,M,K,N} 结合特征,将这些组合分成不同分支,不同分支的优化方案有所不同 只切B: {B}, 无重复读,读写数据量固定, 当case是访存Bound时,优化目标是搬移效率要高, 当case是计算Bound时,优化目标是计算效率要高 切B\M\N:{M}、{N}、{M,N}、{B,M}、{B,N}、{B,M,N}, 可能存在重复读, 当case是访存Bound时,优化目标是重复读尽量少,且搬移效率尽量高, 当case是计算Bound时,优化目标是计算效率要高 涉及切K:{K}、{B,K}、{M,K}、{K,N}、{B,M,K}、{B,K,N}、{M,K,N}、{B,M,K,N} 可能存在重复读,且可能存在写出中间量再读回AIV做Reduce再写出 当算子是计算Bound时,优化目标是总计算效率尽量高,且分块的多核并行计算所引入的额外MTE2、Fixpipe硬件时延不会成为新的瓶颈 由此引出第一个问题,如何分块,数据分块涉及核间分块、核内分块, 优先考虑核间分块问题, 核间分块有4个维度 BMM分块多核并行计算的本质是完成: C[B,M,N]=∑A[B,M,Ki]@B[B,Ki,N] 算子时延主要受限于多核并行计算时的 对于并行计算的瓶颈时延的优化实现是BMM算子达成最优性能的关键 对于多核并行计算 要达成最短时延需要同时决策以下3个维度 软件实现分支选择:决定了核间切分和数据流组织方式 Tiling参数选择:决定了单核内的分块 Swizzle编排
Author
Owner

【修复说明 · 乱码重写】原评论提交时编码损坏、内容不可恢复, 以下按 git 记录 / issue 正文 / 残留文本重建 (要点级, 非逐字原稿):

原评论与 #1 上的评论内容完全相同、时间仅差 1 秒, 系误重复提交 (duplicate)。
本 issue 的评审闭环内容见 #1 评论的重写版; 本评论仅作去重说明。

【修复说明 · 乱码重写】原评论提交时编码损坏、内容不可恢复, 以下按 git 记录 / issue 正文 / 残留文本重建 (要点级, 非逐字原稿): 原评论与 #1 上的评论内容完全相同、时间仅差 1 秒, 系误重复提交 (duplicate)。 本 issue 的评审闭环内容见 #1 评论的重写版; 本评论仅作去重说明。
admin closed this issue 2026-09-03 10:58:12 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/matmul-analysis#2
No description provided.