diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.7.html b/BMM算子优化分析_Release/BMM算子优化分析_v0.7.html
index e08b3af..e97fc0a 100644
--- a/BMM算子优化分析_Release/BMM算子优化分析_v0.7.html
+++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.7.html
@@ -223,14 +223,14 @@ $$
七、StreamK 分支
进入分支条件(汇总)
-- $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < C$
+- $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < \dfrac{C}{2}$
- $\dfrac{K}{grid_K} \ge \dfrac{256\text{B}}{\text{dtype}}$
- $K \ge grid_K^{\,2} \cdot \theta$,其中 $\theta \approx 1.1\times10^{2}$(部分和驻留 L2、AIV 归约的方案;部分和落 GM 时 $\theta \approx 1.7\times10^{3}$)
- 工程约束:确定性等级 ≤ 1(核间归约顺序不定);ND 格式
逐条解释
-- 并行缺口:P 以"L0C 满载的输出基本块"为粒度估计不切 K 的最大并行度——基本块按 L0C 最大利用率取($M^t N^t \cdot 4\text{B} = L0C$),免去预先估计 M/N 具体切分。P < C 意味着即使按最大块切,B/M/N 三维也填不满 32 核,唯一剩余的并行维度是 K。
+- 并行缺口:P 以"L0C 满载的输出基本块"为粒度估计不切 K 的最大并行度——基本块按 L0C 最大利用率取($M^t N^t \cdot 4\text{B} = L0C$),免去预先估计 M/N 具体切分。阈值取 C/2 而非 C:StreamK 的定义就是 grid_K ≥ 2(至少 2 路切 K),且同一 batch 内所有输出块共享同一个 grid_K;grid_K=2 时每块需要 2 个核,总核数需求 = P × 2 ≤ C,即 P ≤ C/2。若 C/2 ≤ P < C,切 2 路就超核数(2P > C),不切又浪费一半核——这个区间由降核 ASW_Basic 承接更合适。P < C/2 才意味着不切 K 时连一半核都填不满,K 是唯一剩余的并行维度。
- 单核 K 段下限:每核 K 段内轴连续长度不小于 dValue 推荐值 256B(BF16 为 128 元素),保证段内搬移效率不崩。
- 归约代价可接受。先按实现流程看清 $T_{Reduce}$ 的构成。StreamK 每个输出块的执行分三步:
@@ -370,11 +370,11 @@ $$
| 分支 | case 数 | 占比 | B 范围 | 区域特征 |
| ASW_Basic | 7290 | 35.2% | 2 ~ 2048 | 通用:B<C 且 P≥C;或 B≥C 但 L1 四形态不满足(M/N 大) |
| IterBatch | 4544 | 21.9% | 32 ~ 2048 | B≥C、负载均衡、L1 四形态之一满足 |
-| 降核 ASW_Basic | 3190 | 15.4% | 2 ~ 128 | P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核(定义与实现见 §八.6) |
+| 降核 ASW_Basic | 3288 | 15.9% | 2 ~ 128 | P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核(定义与实现见 §八.6) |
| 特殊分支 | 1728 | 8.3% | 任意 | K=0 / K=1 |
| MergeBatch | 1674 | 8.1% | 128 ~ 2048 | $b_{core}\ge 4$ 且 $MN \le L0C/(2b_0^2\cdot4\text{B})=8192$ 等五条全过 |
| 转Matmul | 1584 | 7.6% | B=1 | 单边 batch=1 |
-| StreamK | 726 | 3.5% | 2 ~ 128 | P<C 且 K≥8192 |
+| StreamK | 628 | 3.0% | 2 ~ 128 | P<C/2 且 K≥8192 |
IterBatch 四形态命中分布
| 形态 | 命中数 | 说明 |
| b) 双 batch 乒乓 | 1787 | 最多:B 大且单 batch 较小 |
@@ -399,7 +399,7 @@ $$
六个分支全部有真实 case 命中,无空分支;覆盖矩阵无空洞(P<C 且 K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小,调度开销主导,分支选择不敏感);
**MergeBatch 的区域由条件 2($MN \le 8192$)与条件 3(min_DatamountPerCore)夹出**:小 M×N 且单核搬移量足够的大 batch case,两个条件缺一不可。典型分界对照:B=128/M=N=64 时 K=256 → 单核搬移 256KB 不达标落 IterBatch,K=512 → 512KB 达标进 MergeBatch;
IterBatch 与 ASW_Basic 的分界就是 L1 四形态是否满足:单 batch 输入 $(MK+KN)\cdot\text{dtype}$ 相对 L1 的比例决定归属——这正是"核内零重复读"原则的定量体现;
-StreamK 的区域为 P<C 且 K≥8192:B 小、M/N 小、K 大的"细长" case,与理论预期一致;
+StreamK 的区域为 P<C/2 且 K≥8192:B 小、M/N 小、K 大的"细长" case;C/2 ≤ P < C 且 K 大的 98 个 case 由降核 ASW_Basic 承接(切 2 路 K 会超核数,不切又不满核,不如直接用 ⌈P⌉ 核);
降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿(B∈[2,128],占 15.4%):并行度凑不满、切 K 又不划算时,只用 ⌈P⌉ 个核、每核一个 L0C 满载输出块,比强行碎切(tile 跌破搬移效率下限)更快。