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

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

Batch Matmul算子特性分析

1.1 MergeBatch

每个核负责多个Batch的Matmul计算,核间无需同步或通信,假设单核每次要完成b个Batch的Matmul计算,单核计算时将[b,M,K]@[b,K,N]=[b,M,N]转换合并成[bM,K]@[K,bN]=BlockTrace([bM,bN])=[b,M,N],所谓BlockTrace指的是以[M,N]的Block粒度将结果矩阵的块对角线取出作为输出。

1.1.1 是否进入该分支的判断条件
设计原则,MergeBatch核间分B,核内不切M、N,问题关键是核内b、K如何切分可以高效完成BMM计算

什么样的case适合在核间分B、核内左右矩阵多B合并计算时,达到最优性能,即
什么样的case适合MergeBath

应满足如下4个条件:
1、硬件时延可以流水掩盖(double buffer)
2、满足容量约束(每次计算L1&L0ABC均能放下)
3、高效GM->L1数据搬移;
4、算力虽有浪费,但计算不会变成瓶颈;

推导逻辑:
MergeBatch天然要求不切M、N且bL0>=2,即(2M)(2N)<=L0C,如果要求硬件时延流水掩盖乒乓,则应满足2(2M)(2N)<=L0C
硬件流水掩盖(double buffer)要求 2(2M)(2N)<=L0C,即MNout_dtype<=L0C/8
MergeBatch天然要求不切M、N且bL0>=b0,即(b0M)(b0N)<=L0C,如果要求硬件时延流水掩盖乒乓,则应满足2(b0M)(b0N)<=L0C
硬件流水掩盖(double buffer)要求 2(b0M)(b0N)<=L0C,即MNout_dtype<=L0C/(2b0b0)

2*(2MkL0a)<=L0A,2(2N*kL0b)<=L0B,kL0_max=min(kL0a, kL0b, C0Size/in_dtype)
kL1>= kL0_max

具体来说进入MergeBatch分支需同时满足以下条件:
1、 BatchA=BatchB && BatchA/aicNum=b_per_core>= 2b0
2、 MNout_dtype<=L0C/(2b0b0)
3、 B/aicNum*(MK+KN)>=payload_per_core
4、 Max(MK,KN)>min_TileSize
5、 2MN/(M+N) < (芯片对应位宽算存(GM)比/b0)

b0>=2

1、BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= b_thr
L1效率数据量Y, bL1>Y/(MkL1+kL1N)
kL1>kL0, kL0来自:
2MkL0<=L0A && 2kL0N<=L0B, 不乒乓
4MkL0<=L0A && 4kL0N<=L0B, 乒乓

进入MergeBatch分支需同时满足以下条件:
1、 BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= b_thr (搬移效率,GM->L1约束b的最小值)
2、 b>=b_thr,且2bbMNdtype<L0C_Size
a) 求一次核内计算的最大b,
i. 算存比约束,2bMKbN/(bMK+KbN) < 芯片算存比, bi
ii. L0C约束,考虑乒乓, bii_1, 不考虑乒乓 bii_2
iii. L0AB约束,考虑乒乓, biii, 不考虑乒乓 biii_2(需要baseK,无法提前确定)
iv. If(b_per_core < min(bii_2)) 则可以不考虑乒乓,此次 b_max=min(bi, bii_2, b_per_core);else b_max=min(bi, bii_1,b_per_core)
b) 基于核内单次计算的最大b_max,可以确定在L0AB约束下的核内单次计算的最大BaseK
3、 2MN/(M+N) < (芯片对应位宽算存(GM)比/b)
4、 kL1=K/StepK (StepK为正整数),kL1>=k_thr
5、 bL1= L1_Size/( MkL1dtype+kL1Ndtype) 且 bL1>b,如果左矩阵非转置Max(bL1MkL1dtype, kL1Ndtype)> min_TileSize ,如果左矩阵转置Max(MkL1dtype, kL1Ndtype)> min_TileSize
6、 b_per_core( MkL1dtype+kL1Ndtype) >=min_DatamountPerCore

其中对于DV100,k_thr=32Byte/dtype,b_thr=4
MergeBatch需要多batch一起搬移拿到搬移效率收益,如果b_thr太小不如IterBatch,还不会浪费算力(功耗),对于DV100,b_thr经验值为4

1.1.2 分支条件的设计原理
1、 MergeBatch分支的核间按Batch分,平均每核做b个Batch,假设L0可一次放b0个Batch
2、 MergeBatch分支存在算力浪费,因此最优性能目标要求该分支的case必须是访存Bound,不能是算力Bound
3、 不进入算力Bound的必要条件:每核每次[b0M,K]@[K,b0N]的计算都应该是访存Bound,该条件约束了单次计算的b0的上限,即b0MN/(M+N)<芯片算存比
4、 输出矩阵L0C的大小也约束了b0的上限,b02MN*dtype<=L0C size
5、 核内计算不切M、N,可以切K,Cube计算分型也约束了K切分后BaseK的下限,16bit位宽下典型 min BaseK=16
6、 访存Bound的特征对访存效率(主要是GM->L1)提出了较高要求,主要体现在搬移指令的tilesize、dValue、ndNum的配置上,因此每次数据搬移需要将多Batch的左右矩阵搬入,该条件限制了单次计算的b的下限(影响tilesize或ndNum),限制了kL1的下限(影响tilesize、dValue);
7、 为了完成多Batch的合并计算,L0A内存可以容纳多个Batch的左矩阵[b0M,BaseK]、L0B内存可以容纳多个Batch的右矩阵[BaseK,b0N]、L0C内容可以容纳多个Batch的输出矩阵[b0M,b0N],该条件也约束了b0上限

基于B\M\K\N分析进入MergeBatch条件,进入MergeBatch后的不同处理,case遍历过一遍条件别漏了,分析后再总结
M\N不切分的推导?
不切K的情况?4\5\7
MI和SteamK、Basic核心区别?

单核内b0、BaseK的取值优化分析:
单核单次计算的算存比=b0Mb0N/(b0M+b0N)=b0M*N/(M+N),增加b0会导致单核算存比增加,假设b0_max会使得单核算存比>=芯片硬件算存比,则只要b0<b0_max则b0取值不会影响算子性能;BaseK取值不影响算存比,即BaseK只需要满足分型(例如BaseK>16)约束,也不影响算子性能;在访存Bound约束下,核内b0、BaseK切分范围较宽,多种组合均可,从功耗角度每次计算的b0尽量均匀一致对功耗更有利;
举例说明:假设B、M、K、N=128、32、64、128,dtype=bf16,此case算法角度算存比为2MN/(M+N)=51.2,DV100芯片有32核,Cube fp16算力为486TFLOPS、GM带宽1.6TB/s 的硬件算存比为486/(1.6/2)=607.5,对应b0_max=11.86,即每次b0<11均不会进入算力Bound,理论上b0取11以下,baseK取16倍数的多个组合都可以;

1.2 IterBatch

每个核负责1个或多个Batch的Matmul计算,核间无需同步或通信,假设单核每次要完成b个Batch的Matmul计算,单核内串行完成每个Batch的matmul计算并输出。

1.2.1 是否进入该分支的判断条件
进入InterBatch分支需满足以下条件之一:
1、 ( 2MKN/(MK+KN+MN) > = 芯片对应位宽算存(读写GM)比 ) && BatchA=BatchB && BatchA/AiCoreNum=b_per_core = 正整数;
2、 ( 2MN/(M+N) > = 芯片对应位宽算存(读GM)比 ) && (2K/outDtype >= 芯片对应位宽算存(写L2)比) && MNdtype <= L2_Size && BatchA=BatchB && BatchA/AiCoreNum=b_per_core = 正整数
3、 2M*N/(M+N) < (芯片对应位宽算存比) 且同时满足以下条件:
(1) BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= 1
(2) BatchA%AiCoreNum > minCoreNum
(3) 满足如下L1约束之一
a) b_per_core =1 && (MK+KN)dtype <=L1_size
b) b_per_core >1 && 2(MK+KN)*dtype <=L1_size
c) b_per_core =1 && (MK+KN)*dtype>L1Size且(MK+KN/Step)*dtype<L1Size或(MK/Step+KN)*dtype<L1Size,其中Step为大于1的正整数
d) b_per_core >1 && (MK+KN)*dtype>L1Size/2且(MK+KN/Step)*dtype<L1Size/2或(MK/Step+KN)*dtype<L1Size/2,其中Step为大于1的正整数
e) (MK+KN)dtype>L1Size且(M(K/Step)+(K/Step)*N)*dtype<L1Size,其中Step为大于1的正整数
(4) c\d\e的step切分后需满足带宽效率要求

minCoreNum表示带宽能利用满的最小核数,来自芯片实测经验DV100可取0.8*aicNum

1.2.2 分支条件的设计原理

1、 InterBatch分支核间按Batch分,若是访存Bound,核负载利用率建议>80%即bAvg/bMax>0.8;若是计算Bound,核负载利用率建议100%才进入该分支;
2、 输出结果应满足L0C容量要求,即MNdtype<L0C_Size
3、 对于访存Bound,单核数据搬移不宜发生重复读,此时单Batch的M、K、N需满足以下三种情况之一:
(1)、核均Batch数=1Batch,L1应可放下1Batch的左右矩阵即(MK+KN)dtype <=L1_size,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;核均Batch数>1Batch及以上,L1应可放下2Batch的左右矩阵即2(MK+KN)dtype <=L1_size ,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;
(2)、核均Batch数=1Batch,(MK+KN)*dtype>L1Size且(MK+KN/Step)*dtype<L1Size或(MK/Step+KN)*dtype<L1Size,其中Step>1,表示核内处理每Batch时,一个矩阵不切分另一个矩阵切分,对于被切分的矩阵其分块shape及大小应满足带宽效率要求;若核均Batch数>1Batch,(MK+KN)*dtype>L1Size/2且(MK+KN/Step)*dtype<L1Size/2或(MK/Step+KN)*dtype<L1Size/2,其中Step>1,表示核内处理每Batch时,一个矩阵不切分另一个矩阵切分,对于被切分的矩阵其分块shape及大小应满足带宽效率要求
(3)、(MK+KN)dtype>L1Size且(M(K/Step)+(K/Step)*N)*dtype<L1Size,其中Step>1,表示核内处理每Batch时,左右矩阵都切K,且切分后分块大小>min_TileSize,dValue>=min_dValue

1.3 streamK

1.4 Asw_basic

1.5 DV100的ND2NZ搬移效率(90%以上)约束

1、 建议32核并行搬移
2、 单核搬移数据总量必须大于480KB
3、 单tile大小需大于min_TileSize=16KB
4、 dValue大小建议256B,最好为512B
其中min_TileSize、min_dValue为满足搬移效率的最小值;

A、 核均Batch数=1Batch,L1应可放下1Batch的左右矩阵即(MK+KN)dtype <=L1_size,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;核均Batch数>1Batch及以上,L1应可放下2Batch的左右矩阵即2(MK+KN)dtype <=L1_size ,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;
B、 核均Batch数=1Batch,L1可全载左矩阵或右矩阵且同时能放下double buffer的右矩阵或左矩阵分块,即(MK+2RightTileSize)dtype<=L1_Size 或 (KN+2LeftTileSize)dtype<=L1_Size,其中RightTileSize<=MKdtype、LeftTileSize<=KNdtype,为满足搬移效率要求RightTileSize或LeftTileSize应>=min_TileSize,即MKdtype或KNdtype>=min_TileSize,搬移时对应dValue应满足>=min_dValue;核均Batch数>1Batch及以上,L1可放下double buffer的全载左矩阵或右矩阵+double buffer的右矩阵或左矩阵分块,即2*(MK+2RightTileSize)dtype<=L1_Size 或 2(KN+2LeftTileSize)dtype<=L1_Size,其中RightTileSize<=MKdtype、LeftTileSize<=KNdtype,即MKdtype或KN*dtype>=min_TileSize,搬移时对应dValue应满足>=min_dValue;
C、 单核内分块计算仅切K,L1可放下double buffer的[M,kL1]+[kL1,N], 其中kL1<=K,且分块大小>min_TileSize,dValue>=min_dValue

Batch Matmul算子特性分析 1.1 MergeBatch 每个核负责多个Batch的Matmul计算,核间无需同步或通信,假设单核每次要完成b个Batch的Matmul计算,单核计算时将[b,M,K]@[b,K,N]=[b,M,N]转换合并成[bM,K]@[K,bN]=BlockTrace([bM,bN])=[b,M,N],所谓BlockTrace指的是以[M,N]的Block粒度将结果矩阵的块对角线取出作为输出。 1.1.1 是否进入该分支的判断条件 设计原则,MergeBatch核间分B,核内不切M、N,问题关键是核内b、K如何切分可以高效完成BMM计算 什么样的case适合在核间分B、核内左右矩阵多B合并计算时,达到最优性能,即 什么样的case适合MergeBath 应满足如下4个条件: 1、硬件时延可以流水掩盖(double buffer) 2、满足容量约束(每次计算L1&L0ABC均能放下) 3、高效GM->L1数据搬移; 4、算力虽有浪费,但计算不会变成瓶颈; 推导逻辑: MergeBatch天然要求不切M、N且bL0>=2,即(2M)(2N)<=L0C,如果要求硬件时延流水掩盖乒乓,则应满足2(2M)(2N)<=L0C 硬件流水掩盖(double buffer)要求 2(2M)(2N)<=L0C,即MNout_dtype<=L0C/8 MergeBatch天然要求不切M、N且bL0>=b0,即(b0M)(b0N)<=L0C,如果要求硬件时延流水掩盖乒乓,则应满足2(b0M)(b0N)<=L0C 硬件流水掩盖(double buffer)要求 2(b0M)(b0N)<=L0C,即MNout_dtype<=L0C/(2b0b0) 2*(2MkL0a)<=L0A,2(2N*kL0b)<=L0B,kL0_max=min(kL0a, kL0b, C0Size/in_dtype) kL1>= kL0_max 具体来说进入MergeBatch分支需同时满足以下条件: 1、 BatchA=BatchB && BatchA/aicNum=b_per_core>= 2b0 2、 MNout_dtype<=L0C/(2b0b0) 3、 B/aicNum*(MK+KN)>=payload_per_core 4、 Max(MK,KN)>min_TileSize 5、 2MN/(M+N) < (芯片对应位宽算存(GM)比/b0) b0>=2 1、BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= b_thr L1效率数据量Y, bL1>Y/(MkL1+kL1N) kL1>kL0, kL0来自: 2MkL0<=L0A && 2kL0N<=L0B, 不乒乓 4MkL0<=L0A && 4kL0N<=L0B, 乒乓 进入MergeBatch分支需同时满足以下条件: 1、 BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= b_thr (搬移效率,GM->L1约束b的最小值) 2、 b>=b_thr,且2bbMNdtype<L0C_Size a) 求一次核内计算的最大b, i. 算存比约束,2bMKbN/(bMK+KbN) < 芯片算存比, bi ii. L0C约束,考虑乒乓, bii_1, 不考虑乒乓 bii_2 iii. L0AB约束,考虑乒乓, biii, 不考虑乒乓 biii_2(需要baseK,无法提前确定) iv. If(b_per_core < min(bii_2)) 则可以不考虑乒乓,此次 b_max=min(bi, bii_2, b_per_core);else b_max=min(bi, bii_1,b_per_core) b) 基于核内单次计算的最大b_max,可以确定在L0AB约束下的核内单次计算的最大BaseK 3、 2MN/(M+N) < (芯片对应位宽算存(GM)比/b) 4、 kL1=K/StepK (StepK为正整数),kL1>=k_thr 5、 bL1= L1_Size/( MkL1dtype+kL1Ndtype) 且 bL1>b,如果左矩阵非转置Max(bL1MkL1dtype, kL1Ndtype)> min_TileSize ,如果左矩阵转置Max(MkL1dtype, kL1Ndtype)> min_TileSize 6、 b_per_core( MkL1dtype+kL1Ndtype) >=min_DatamountPerCore 其中对于DV100,k_thr=32Byte/dtype,b_thr=4 MergeBatch需要多batch一起搬移拿到搬移效率收益,如果b_thr太小不如IterBatch,还不会浪费算力(功耗),对于DV100,b_thr经验值为4 1.1.2 分支条件的设计原理 1、 MergeBatch分支的核间按Batch分,平均每核做b个Batch,假设L0可一次放b0个Batch 2、 MergeBatch分支存在算力浪费,因此最优性能目标要求该分支的case必须是访存Bound,不能是算力Bound 3、 不进入算力Bound的必要条件:每核每次[b0M,K]@[K,b0N]的计算都应该是访存Bound,该条件约束了单次计算的b0的上限,即b0MN/(M+N)<芯片算存比 4、 输出矩阵L0C的大小也约束了b0的上限,b02MN*dtype<=L0C size 5、 核内计算不切M、N,可以切K,Cube计算分型也约束了K切分后BaseK的下限,16bit位宽下典型 min BaseK=16 6、 访存Bound的特征对访存效率(主要是GM->L1)提出了较高要求,主要体现在搬移指令的tilesize、dValue、ndNum的配置上,因此每次数据搬移需要将多Batch的左右矩阵搬入,该条件限制了单次计算的b的下限(影响tilesize或ndNum),限制了kL1的下限(影响tilesize、dValue); 7、 为了完成多Batch的合并计算,L0A内存可以容纳多个Batch的左矩阵[b0M,BaseK]、L0B内存可以容纳多个Batch的右矩阵[BaseK,b0N]、L0C内容可以容纳多个Batch的输出矩阵[b0M,b0N],该条件也约束了b0上限 基于B\M\K\N分析进入MergeBatch条件,进入MergeBatch后的不同处理,case遍历过一遍条件别漏了,分析后再总结 M\N不切分的推导? 不切K的情况?4\5\7 MI和SteamK、Basic核心区别? 单核内b0、BaseK的取值优化分析: 单核单次计算的算存比=b0Mb0N/(b0M+b0N)=b0M*N/(M+N),增加b0会导致单核算存比增加,假设b0_max会使得单核算存比>=芯片硬件算存比,则只要b0<b0_max则b0取值不会影响算子性能;BaseK取值不影响算存比,即BaseK只需要满足分型(例如BaseK>16)约束,也不影响算子性能;在访存Bound约束下,核内b0、BaseK切分范围较宽,多种组合均可,从功耗角度每次计算的b0尽量均匀一致对功耗更有利; 举例说明:假设B、M、K、N=128、32、64、128,dtype=bf16,此case算法角度算存比为2MN/(M+N)=51.2,DV100芯片有32核,Cube fp16算力为486TFLOPS、GM带宽1.6TB/s 的硬件算存比为486/(1.6/2)=607.5,对应b0_max=11.86,即每次b0<11均不会进入算力Bound,理论上b0取11以下,baseK取16倍数的多个组合都可以; 1.2 IterBatch 每个核负责1个或多个Batch的Matmul计算,核间无需同步或通信,假设单核每次要完成b个Batch的Matmul计算,单核内串行完成每个Batch的matmul计算并输出。 1.2.1 是否进入该分支的判断条件 进入InterBatch分支需满足以下条件之一: 1、 ( 2MKN/(MK+KN+MN) > = 芯片对应位宽算存(读写GM)比 ) && BatchA=BatchB && BatchA/AiCoreNum=b_per_core = 正整数; 2、 ( 2MN/(M+N) > = 芯片对应位宽算存(读GM)比 ) && (2K/outDtype >= 芯片对应位宽算存(写L2)比) && MNdtype <= L2_Size && BatchA=BatchB && BatchA/AiCoreNum=b_per_core = 正整数 3、 2M*N/(M+N) < (芯片对应位宽算存比) 且同时满足以下条件: (1) BatchA=BatchB && BatchA/AiCoreNum=b_per_core>= 1 (2) BatchA%AiCoreNum > minCoreNum (3) 满足如下L1约束之一 a) b_per_core =1 && (MK+KN)dtype <=L1_size b) b_per_core >1 && 2(MK+KN)*dtype <=L1_size c) b_per_core =1 && (MK+KN)*dtype>L1Size且(MK+KN/Step)*dtype<L1Size或(MK/Step+KN)*dtype<L1Size,其中Step为大于1的正整数 d) b_per_core >1 && (MK+KN)*dtype>L1Size/2且(MK+KN/Step)*dtype<L1Size/2或(MK/Step+KN)*dtype<L1Size/2,其中Step为大于1的正整数 e) (MK+KN)dtype>L1Size且(M(K/Step)+(K/Step)*N)*dtype<L1Size,其中Step为大于1的正整数 (4) c\d\e的step切分后需满足带宽效率要求 minCoreNum表示带宽能利用满的最小核数,来自芯片实测经验DV100可取0.8*aicNum 1.2.2 分支条件的设计原理 1、 InterBatch分支核间按Batch分,若是访存Bound,核负载利用率建议>80%即bAvg/bMax>0.8;若是计算Bound,核负载利用率建议100%才进入该分支; 2、 输出结果应满足L0C容量要求,即MNdtype<L0C_Size 3、 对于访存Bound,单核数据搬移不宜发生重复读,此时单Batch的M、K、N需满足以下三种情况之一: (1)、核均Batch数=1Batch,L1应可放下1Batch的左右矩阵即(MK+KN)dtype <=L1_size,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;核均Batch数>1Batch及以上,L1应可放下2Batch的左右矩阵即2(MK+KN)dtype <=L1_size ,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue; (2)、核均Batch数=1Batch,(MK+KN)*dtype>L1Size且(MK+KN/Step)*dtype<L1Size或(MK/Step+KN)*dtype<L1Size,其中Step>1,表示核内处理每Batch时,一个矩阵不切分另一个矩阵切分,对于被切分的矩阵其分块shape及大小应满足带宽效率要求;若核均Batch数>1Batch,(MK+KN)*dtype>L1Size/2且(MK+KN/Step)*dtype<L1Size/2或(MK/Step+KN)*dtype<L1Size/2,其中Step>1,表示核内处理每Batch时,一个矩阵不切分另一个矩阵切分,对于被切分的矩阵其分块shape及大小应满足带宽效率要求 (3)、(MK+KN)dtype>L1Size且(M(K/Step)+(K/Step)*N)*dtype<L1Size,其中Step>1,表示核内处理每Batch时,左右矩阵都切K,且切分后分块大小>min_TileSize,dValue>=min_dValue 1.3 streamK 1.4 Asw_basic 1.5 DV100的ND2NZ搬移效率(90%以上)约束 1、 建议32核并行搬移 2、 单核搬移数据总量必须大于480KB 3、 单tile大小需大于min_TileSize=16KB 4、 dValue大小建议256B,最好为512B 其中min_TileSize、min_dValue为满足搬移效率的最小值; A、 核均Batch数=1Batch,L1应可放下1Batch的左右矩阵即(MK+KN)dtype <=L1_size,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue;核均Batch数>1Batch及以上,L1应可放下2Batch的左右矩阵即2(MK+KN)dtype <=L1_size ,且多数数据量的搬移满足单次搬移效率要求,即Max(MKdtype,KNdtype) > min_TileSize,对应dValue>min_dValue; B、 核均Batch数=1Batch,L1可全载左矩阵或右矩阵且同时能放下double buffer的右矩阵或左矩阵分块,即(MK+2RightTileSize)dtype<=L1_Size 或 (KN+2LeftTileSize)dtype<=L1_Size,其中RightTileSize<=MKdtype、LeftTileSize<=KNdtype,为满足搬移效率要求RightTileSize或LeftTileSize应>=min_TileSize,即MKdtype或KNdtype>=min_TileSize,搬移时对应dValue应满足>=min_dValue;核均Batch数>1Batch及以上,L1可放下double buffer的全载左矩阵或右矩阵+double buffer的右矩阵或左矩阵分块,即2*(MK+2RightTileSize)dtype<=L1_Size 或 2(KN+2LeftTileSize)dtype<=L1_Size,其中RightTileSize<=MKdtype、LeftTileSize<=KNdtype,即MKdtype或KN*dtype>=min_TileSize,搬移时对应dValue应满足>=min_dValue; C、 单核内分块计算仅切K,L1可放下double buffer的[M,kL1]+[kL1,N], 其中kL1<=K,且分块大小>min_TileSize,dValue>=min_dValue
Author
Owner

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

《Batch Matmul 测试分析报告》v1.0 已随 main commit e7b47f4 上传:

  • e7b47f4: 添加《Batch Matmul算子特性分析》v1.0 与《BMM从分块计算到四大分支的逻辑推导》;
  • 报告 (.md/.html) 覆盖: 算子功能与接口、时延模型 T_total = max(MTE2/MMAD/Fixpipe) + drain、
    分支体系(转Matmul/MergeBatch/IterBatch/StreamK/ASW_Basic)的系统推导与完备性验证、各分支
    进入条件与实现方案流程、完备性证明;
  • 评审指出文档/模型待修问题(后在 issue #4 起逐条闭环):
    ① 转Matmul 分支不对称: BatchB=1 可免费折叠, BatchA=1 需真实转置+重排+输出 scatter 且
    无对应模型仲裁, 广播 case 建议走 ASW_Basic/常驻 L1 形态;
    ② K=0/1 退化建议前置为特殊(AIV)通路;
    ③ IterBatch 条件 3(2) 疑误杀部分可行 case (访存 Bound 判据缺证据);
    ④ 搬移效率建议按"连续维 dValue"口径而非固定 128B;
    ⑤ alignK(64)/M,N 对齐等硬编码建议参数化可继承。
  • 另附《BMM从分块计算到四大分支的逻辑推导》: 从分块公式出发推导四大分支之间的逻辑关系
    (切B → B<C 切M/N → 切K), 约 15 条判据并归并为优先级类。
【修复说明 · 乱码重写】原评论提交时编码损坏、内容不可恢复, 以下按 git 记录 / issue 正文 / 残留文本重建 (要点级, 非逐字原稿): 《Batch Matmul 测试分析报告》v1.0 已随 main commit e7b47f4 上传: - e7b47f4: 添加《Batch Matmul算子特性分析》v1.0 与《BMM从分块计算到四大分支的逻辑推导》; - 报告 (.md/.html) 覆盖: 算子功能与接口、时延模型 T_total = max(MTE2/MMAD/Fixpipe) + drain、 分支体系(转Matmul/MergeBatch/IterBatch/StreamK/ASW_Basic)的系统推导与完备性验证、各分支 进入条件与实现方案流程、完备性证明; - 评审指出文档/模型待修问题(后在 issue #4 起逐条闭环): ① 转Matmul 分支不对称: BatchB=1 可免费折叠, BatchA=1 需真实转置+重排+输出 scatter 且 无对应模型仲裁, 广播 case 建议走 ASW_Basic/常驻 L1 形态; ② K=0/1 退化建议前置为特殊(AIV)通路; ③ IterBatch 条件 3(2) 疑误杀部分可行 case (访存 Bound 判据缺证据); ④ 搬移效率建议按"连续维 dValue"口径而非固定 128B; ⑤ alignK(64)/M,N 对齐等硬编码建议参数化可继承。 - 另附《BMM从分块计算到四大分支的逻辑推导》: 从分块公式出发推导四大分支之间的逻辑关系 (切B → B<C 切M/N → 切K), 约 15 条判据并归并为优先级类。
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#1
No description provided.