修正 StreamK 进入条件:P<C → P<C/2(grid_K≥2 需 P×2≤C)

This commit is contained in:
2026-08-23 10:20:31 +00:00
parent 5ebe65f4fb
commit cf84cf76c8

View File

@@ -247,14 +247,14 @@ $b_{core} \ge 2$ 时另一半 L1 在计算期间预取下一 batch 的驻留侧
### 进入分支条件(汇总) ### 进入分支条件(汇总)
1. $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < C$ 1. $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} < \dfrac{C}{2}$
2. $\dfrac{K}{grid_K} \ge \dfrac{256\text{B}}{\text{dtype}}$ 2. $\dfrac{K}{grid_K} \ge \dfrac{256\text{B}}{\text{dtype}}$
3. $K \ge grid_K^{\,2} \cdot \theta$其中 $\theta \approx 1.1\times10^{2}$部分和驻留 L2AIV 归约的方案部分和落 GM $\theta \approx 1.7\times10^{3}$ 3. $K \ge grid_K^{\,2} \cdot \theta$其中 $\theta \approx 1.1\times10^{2}$部分和驻留 L2AIV 归约的方案部分和落 GM $\theta \approx 1.7\times10^{3}$
4. 工程约束确定性等级 1核间归约顺序不定ND 格式 4. 工程约束确定性等级 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 1. **并行缺口**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_Kgrid_K=2 时每块需要 2 个核总核数需求 = P × 2 C P C/2 C/2 P < C 2 路就超核数2P > C不切又浪费一半核——这个区间由降核 ASW_Basic 承接更合适。P < C/2 才意味着不切 K 时连一半核都填不满K 唯一剩余的并行维度
2. **单核 K 段下限**每核 K 段内轴连续长度不小于 dValue 推荐值 256BBF16 128 元素保证段内搬移效率不崩 2. **单核 K 段下限**每核 K 段内轴连续长度不小于 dValue 推荐值 256BBF16 128 元素保证段内搬移效率不崩
3. **归约代价可接受**先按实现流程看清 $T_{Reduce}$ 的构成StreamK 每个输出块的执行分三步 3. **归约代价可接受**先按实现流程看清 $T_{Reduce}$ 的构成StreamK 每个输出块的执行分三步
@@ -451,11 +451,11 @@ $$
|---|---|---|---|---| |---|---|---|---|---|
| ASW_Basic | 7290 | 35.2% | 2 ~ 2048 | 通用B<C PC BC L1 四形态不满足M/N | | ASW_Basic | 7290 | 35.2% | 2 ~ 2048 | 通用B<C PC BC L1 四形态不满足M/N |
| IterBatch | 4544 | 21.9% | 32 ~ 2048 | BC负载均衡L1 四形态之一满足 | | IterBatch | 4544 | 21.9% | 32 ~ 2048 | BC负载均衡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 | | 特殊分支 | 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$ 等五条全过 | | 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 | | 转Matmul | 1584 | 7.6% | B=1 | 单边 batch=1 |
| StreamK | 726 | 3.5% | 2 ~ 128 | P<C K8192 | | StreamK | 628 | 3.0% | 2 ~ 128 | P<C/2 K8192 |
### IterBatch 四形态命中分布 ### IterBatch 四形态命中分布
@@ -487,5 +487,5 @@ $$
1. **六个分支全部有真实 case 命中**无空分支覆盖矩阵无空洞P<C K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小调度开销主导分支选择不敏感 1. **六个分支全部有真实 case 命中**无空分支覆盖矩阵无空洞P<C K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小调度开销主导分支选择不敏感
2. **MergeBatch 的区域由条件 2$MN \le 8192$)与条件 3min_DatamountPerCore夹出** M×N 且单核搬移量足够的大 batch case两个条件缺一不可典型分界对照B=128/M=N=64 K=256 单核搬移 256KB 不达标落 IterBatchK=512 512KB 达标进 MergeBatch 2. **MergeBatch 的区域由条件 2$MN \le 8192$)与条件 3min_DatamountPerCore夹出** M×N 且单核搬移量足够的大 batch case两个条件缺一不可典型分界对照B=128/M=N=64 K=256 单核搬移 256KB 不达标落 IterBatchK=512 512KB 达标进 MergeBatch
3. **IterBatch 与 ASW_Basic 的分界就是 L1 四形态是否满足** batch 输入 $(MK+KN)\cdot\text{dtype}$ 相对 L1 的比例决定归属——这正是"核内零重复读"原则的定量体现 3. **IterBatch 与 ASW_Basic 的分界就是 L1 四形态是否满足** batch 输入 $(MK+KN)\cdot\text{dtype}$ 相对 L1 的比例决定归属——这正是"核内零重复读"原则的定量体现
4. **StreamK 的区域为 P<C 且 K≥8192**B M/N K 大的"细长" case与理论预期一致 4. **StreamK 的区域为 P<C/2 且 K≥8192**B M/N K 大的"细长" caseC/2 P < C K 大的 98 case 由降核 ASW_Basic 承接 2 K 会超核数不切又不满核不如直接用 P
5. **降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿**B∈[2,128] 15.4%并行度凑不满 K 又不划算时只用 P 个核每核一个 L0C 满载输出块比强行碎切tile 跌破搬移效率下限更快 5. **降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿**B∈[2,128] 15.4%并行度凑不满 K 又不划算时只用 P 个核每核一个 L0C 满载输出块比强行碎切tile 跌破搬移效率下限更快