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 分支

进入分支条件(汇总)

    -
  1. $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < C$
  2. +
  3. $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < \dfrac{C}{2}$
  4. $\dfrac{K}{grid_K} \ge \dfrac{256\text{B}}{\text{dtype}}$
  5. $K \ge grid_K^{\,2} \cdot \theta$,其中 $\theta \approx 1.1\times10^{2}$(部分和驻留 L2、AIV 归约的方案;部分和落 GM 时 $\theta \approx 1.7\times10^{3}$)
  6. 工程约束:确定性等级 ≤ 1(核间归约顺序不定);ND 格式

逐条解释

    -
  1. 并行缺口:P 以"L0C 满载的输出基本块"为粒度估计不切 K 的最大并行度——基本块按 L0C 最大利用率取($M^t N^t \cdot 4\text{B} = L0C$),免去预先估计 M/N 具体切分。P < C 意味着即使按最大块切,B/M/N 三维也填不满 32 核,唯一剩余的并行维度是 K。
  2. +
  3. 并行缺口: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 是唯一剩余的并行维度。
  4. 单核 K 段下限:每核 K 段内轴连续长度不小于 dValue 推荐值 256B(BF16 为 128 元素),保证段内搬移效率不崩。
  5. 归约代价可接受。先按实现流程看清 $T_{Reduce}$ 的构成。StreamK 每个输出块的执行分三步:
@@ -370,11 +370,11 @@ $$ - + -
分支case 数占比B 范围区域特征
ASW_Basic729035.2%2 ~ 2048通用:B<C 且 P≥C;或 B≥C 但 L1 四形态不满足(M/N 大)
IterBatch454421.9%32 ~ 2048B≥C、负载均衡、L1 四形态之一满足
降核 ASW_Basic319015.4%2 ~ 128P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核(定义与实现见 §八.6)
降核 ASW_Basic328815.9%2 ~ 128P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核(定义与实现见 §八.6)
特殊分支17288.3%任意K=0 / K=1
MergeBatch16748.1%128 ~ 2048$b_{core}\ge 4$ 且 $MN \le L0C/(2b_0^2\cdot4\text{B})=8192$ 等五条全过
转Matmul15847.6%B=1单边 batch=1
StreamK7263.5%2 ~ 128P<C 且 K≥8192
+StreamK6283.0%2 ~ 128P<C/2 且 K≥8192

IterBatch 四形态命中分布

@@ -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 跌破搬移效率下限)更快。
  • 形态命中数说明
    b) 双 batch 乒乓1787最多:B 大且单 batch 较小