diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.7.md b/BMM算子优化分析_Release/BMM算子优化分析_v0.7.md index 963c763..ad1e00e 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.7.md +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.7.md @@ -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}}$ 3. $K \ge grid_K^{\,2} \cdot \theta$,其中 $\theta \approx 1.1\times10^{2}$(部分和驻留 L2、AIV 归约的方案;部分和落 GM 时 $\theta \approx 1.7\times10^{3}$) 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_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 是唯一剩余的并行维度。 2. **单核 K 段下限**:每核 K 段内轴连续长度不小于 dValue 推荐值 256B(BF16 为 128 元素),保证段内搬移效率不崩。 3. **归约代价可接受**。先按实现流程看清 $T_{Reduce}$ 的构成。StreamK 每个输出块的执行分三步: @@ -451,11 +451,11 @@ $$ |---|---|---|---|---| | ASW_Basic | 7290 | 35.2% | 2 ~ 2048 | 通用:B