From e1a0fb80c86dc93ee8513fd8ce25a439671bb17c Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 24 Aug 2026 00:20:54 +0000 Subject: [PATCH] =?UTF-8?q?v0.8:=20=E5=90=8C=E6=AD=A5HTML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BMM算子优化分析_v0.8.html | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.8.html b/BMM算子优化分析_Release/BMM算子优化分析_v0.8.html index 8984dde..935b9d1 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.8.html +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.8.html @@ -55,10 +55,13 @@ MathJax = {

二、符号与芯片参数约定

+ + - + + @@ -237,20 +240,31 @@ $$
$$T_{SK} = \frac{T_{pipe}}{grid_K} + T_{Reduce} < T_{pipe} \;\Longleftrightarrow\; T_{Reduce} < T_{pipe}\left(1-\frac{1}{grid_K}\right)$$

其中 $T_{pipe}=\max(T_{MTE2},\,T_{MMAD})$ 为不切 K 时单输出块的流水瓶颈。等价于 $T_{pipe} > \dfrac{grid_K}{grid_K-1}\cdot T_{Reduce}$——安全系数 α = grid_K/(grid_K-1) 由流水分析导出(grid_K=2 时 α=2),非经验值。

StreamK case 的 M、N 小(P<C/2),AI = 2MN/(M+N) 通常远低于 R₁₆ → 多数访存 Bound,$T_{pipe} = T_{MTE2}$ 是瓶颈,条件为 $T_{MTE2} > \dfrac{grid_K}{grid_K-1}\cdot T_{Reduce}$。

-

$T_{Reduce}$ 的构成(每输出块,部分和驻留 L2、AIV 归约):

+

$T_{Reduce}$ 的构成(每输出块,部分和驻留 L2、AIV 归约;符号定义见 §二):

$$ T_{Reduce} = \underbrace{\frac{grid_K \cdot MN \cdot 4\text{B}}{W_{L2}}}_{\text{AIC 写部分和}} + \underbrace{\frac{grid_K \cdot MN \cdot 4\text{B}}{W_{L2}}}_{\text{AIV 读回}} + \underbrace{\frac{grid_K \cdot MN}{Q_{AIV}}}_{\text{AIV 求和}} + \underbrace{\frac{MN \cdot outB}{W_{L2}}}_{\text{写回}} $$
-

代入数值求 K 闭式阈值(以计算 Bound 为例,$T_{pipe}=T_{MMAD}=2MNK/Q_{16}$):

+

求 K 闭式阈值(以计算 Bound 为例,$T_{pipe}=T_{MMAD}=2MNK/Q_{16}$;访存 Bound 时阈值更低):

$$ -K > \frac{grid_K^2}{grid_K-1}\cdot\underbrace{\frac{Q_{16}}{2}\Big(\frac{8\text{B}}{W_{L2}}+\frac{1}{Q_{AIV}}\Big)}_{\theta_c\,\approx\,11} + \frac{grid_K}{grid_K-1}\cdot\frac{Q_{16}\cdot outB}{2W_{L2}} +K > \frac{grid_K^2}{grid_K-1}\cdot\theta_c,\qquad +\theta_c = \frac{Q_{16}}{2}\Big(\frac{8\text{B}}{W_{L2}}+\frac{1}{Q_{AIV}}\Big) $$
-

grid_K=2→K>49;4→K>62;8→K>102。访存 Bound 时阈值更低(θ_m ~ 0.04·MN/(M+N),可忽略)。

-

注意 θ_c 对 workspace 落点敏感:部分和落 GM 时读写带宽从 5.2TB/s 降到 ~0.64TB/s,θ_c 升至约 87。设计时应优先保证 workspace 驻留 L2。

+

代入数值:$Q_{16}$ = 486/32 ≈ 15.2 TFLOPS,$W_{L2}$ = 5.2 TB/s,$Q_{AIV}$ ≈ 13.5 Tops/s:

+
$$ +\theta_c = \frac{15.2\times10^{12}}{2}\Big(\underbrace{\frac{8}{5.2\times10^{12}}}_{1.54\,\text{ps/元素}} + \underbrace{\frac{1}{13.5\times10^{12}}}_{0.07\,\text{ps/元素}}\Big) = 7.6\times10^{12} \times 1.61\times10^{-12} \approx 12 +$$
+

L2 读写(1.54 ps/元素)是主导项,AIV 求和(0.07)仅占 5%;多 tile 并行归约共享 L2/AIV 带宽的影响可忽略(P < C/2 块并行,归约总量 ~MB 级,vs 单块 T_pipe ~μs 级)。

+

grid_K=2→K>49;4→K>66;8→K>112。

+

注意 θ_c 对 workspace 落点敏感:部分和落 GM 时读写带宽从 5.2TB/s 降到 ~0.64TB/s,θ_c 升至约 97。设计时应优先保证 workspace 驻留 L2。

  1. 工程约束:归约顺序不定引入浮点非确定性,确定性等级 2/3 的业务禁用。
-

源码对照batch_matmul_v3_basic_streamk_tiling.cpp 中 K 的固定门槛为 CeilAlign(K,256) ≥ max(8192, aicNum×256B/dtype)aicNum×256B/dtype 对应条件 2 的 dValue 推荐值。修正后的归约阈值(θ_c≈11)远低于 8192——说明 8192 的主要动机不是归约代价,而是摊薄固定开销(workspace 建立、归约同步、AIV 启动),是条件 2/3 的保守合并近似。

+

源码对照batch_matmul_v3_basic_streamk_tiling.cpp 中 K 的固定门槛为 CeilAlign(K,256) ≥ max(8192, aicNum×256B/dtype)

+ +

max 取更严格的 8192。修正后的归约阈值(θ_c≈12,grid_K=32 时 K>396)远低于 8192,说明 8192 的绑定约束是 dValue(条件 2),不是归约代价(条件 3)。源码不动态计算 grid_K,用固定阈值同时覆盖条件 2 的最保守情形和条件 3,是两条条件的保守合并近似。

实现方案

核间组织:先按 B/M/N 切出输出块,剩余核预算折成 K 向份数:

$$
符号含义950PR 取值
CAIC 核数(aicNum)32
Q₁₆单核 Cube BF16 峰值算力486/C ≈ 15.2 TFLOPS
Q_AIVAIV 向量求和吞吐(64 核合计)64×128 fp32/拍×1.65GHz ≈ 13.5 Tops/s
L1每核 L1 Buffer512KB
L0A / L0B每核 L0A / L0B64KB / 64KB
L0C每核 L0C(FP32 累加,4B/元素)256KB
L2L2 Cache 容量 / 带宽128MB / 5.2TB/s
L2L2 Cache 容量128MB
W_L2L2 读写带宽5.2TB/s
W_GMGM 带宽(读写共享)1.6TB/s
R₁₆16bit 对应位宽算存比≈607.5 FLOP/元素
dValue单数据块内数据连续排布长度推荐 256B/512B,不建议 <128B