diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.6.html b/BMM算子优化分析_Release/BMM算子优化分析_v0.6.html index 34c31ab..e7ee8ee 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.6.html +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.6.html @@ -320,7 +320,7 @@ $$

只与 K、outB 有关(K 越小,单位时间输出越密)。例(BF16 输出,C·Q₁₆=432 TFLOPS):K=512 → 844 GB/s;K=256 → 1.69 TB/s,已超 GM 总线——此时任何策略都写出 Bound,L2 缓冲只能削峰(fixpipe 以 5.2TB/s 写 L2 吸收突发),平均速率仍受总线限制,应预期 Fixpipe 成为 $T_{total}$ 的 max 项。

分场景决策

**场景 A:$S_{in} + S_{out} \le L2$(全驻留)**。输入读一遍($r_{in}=1$),输出驻留 L2(dirty)异步回写 GM——写出走 5.2TB/s L2 写口,不与读争,也削平了 GM 写突发。无需切分。

-

**场景 B:$S_{in} \le L2$ 但 $S_{in} + S_{out} > L2$(输入能驻留,加上输出超了)输入驻留、输出直写 GM**(fixpipe L0C→GM,不占 L2),保住 $r_{in}=1$;校验总线:$(S_{in} + S_{out})/T_{MMAD} \le W_{GM}$。例:B=8、M=N=4096、K=512、BF16——$S_{in}$=64MB ≤ L2,$S_{out}$=256MB 直写 GM;T_MMAD≈318µs,总流量速率 (64+256)MB/318µs ≈ 1.06TB/s < 1.6TB/s ✓。

+

**场景 B:$S_{in} \le L2$ 但 $S_{in} + S_{out} > L2$(输入能驻留,加上输出超了)输入驻留、输出直写 GM**(fixpipe L0C→GM,不占 L2),保住 $r_{in}=1$;校验总线:$(S_{in} + S_{out})/T_{MMAD} \le W_{GM}$。例:B=8、M=N=4096、K=512、BF16——$S_{in}$≈67MB ≤ L2,$S_{out}$≈268MB 直写 GM;T_MMAD≈318µs,总流量速率 (67+268)MB/318µs ≈ 1.05TB/s < 1.6TB/s ✓。

**场景 C:$S_{in} > L2$(输入本身超)**。必须 L2 切分。输出直写 GM 以最大化 $L2_{read}$,切分数满足

$$ mL2TileNum \times nL2TileNum \;\ge\; \frac{S_{in}}{L2_{read}} @@ -329,7 +329,7 @@ $$
$$ transConflict = \max\big(\lceil C / mCnt \rceil,\; \lceil C / nCnt \rceil\big) \le 6 $$
-

即同一时刻并发核访问同一 A/B 块的最大冲突数不超过阈值(经验值 6);切分方案中优先选尾波不满载占比小(拖尾 < 一半)的。遍历大方向由 calOrder 决定(0=M 优先、1=N 优先),按形状选共享矩阵更能驻留 L2 的方向。例:B=64、M=N=2048、K=1024、BF16——$S_{in}$=512MB > L2,输出直写($L2_{read}$=128MB),切 3×2=6 块(每块输入约 89MB ≤ 128MB);总流量 1GB,T_MMAD≈1.27ms,速率 844GB/s < 1.6TB/s ✓。

+

即同一时刻并发核访问同一 A/B 块的最大冲突数不超过阈值(经验值 6);切分方案中优先选尾波不满载占比小(拖尾 < 一半)的。遍历大方向由 calOrder 决定(0=M 优先、1=N 优先),按形状选共享矩阵更能驻留 L2 的方向。例:B=64、M=N=2048、K=1024、BF16——$S_{in}$≈537MB > L2,输出直写($L2_{read}$=128MB),切 3×2=6 块(每块输入约 89MB ≤ 128MB);总流量约 1.07GB,T_MMAD≈1.27ms,速率 844GB/s < 1.6TB/s ✓。

补充:若输出会被后续算子立即消费(融合场景),输出驻留 L2 让下游读命中,场景 B/C 的策略反过来;本文按单算子边界分析。

4、核内 tiling:$M^t N^t \cdot 4\text{B} \cdot DB \le L0C$;$M^t K^t \cdot \text{dtype} \cdot 2 \le L0A$、$K^t N^t \cdot \text{dtype} \cdot 2 \le L0B$;内轴按 dValue 256B/512B 对齐;L1 按容量开双缓冲,余量充足开 4 buffer。

5、内部特化(参数极限,不是独立分支):单边无 batch 且该侧矩阵小($M \le 256$、$MK\cdot\text{dtype}\cdot 2 \le L1$、对侧每核循环 ≥4 轮)时小侧整个常驻 L1、只搬一次(L1 全载)。