v0.91: 同步HTML
This commit is contained in:
@@ -141,23 +141,35 @@ $$</div>
|
||||
<li><b>batch 关系与每核份额</b>:无广播才能逐 batch 对应合并;每核至少分到 $2b_0$ 个 batch——$b_0$ 是合并搬移有收益的最小合并数(取 2),2 组起步才能构成合并组间乒乓流水(即 $b_{core} \ge 4$)。</li>
|
||||
</ol>
|
||||
<p> <b>MergeBatch vs IterBatch 分界建模</b>:</p>
|
||||
<p> *一阶流水模型*:设 $n_K = K/k_{L1}$,每分块搬移 $T_{load} = k_{L1}(M{+}N)\cdot\text{dtype}/BW_{pc}$,每分块计算 $T_{comp} = 2MN \cdot k_{L1}/Q_{16}$,输出写回 $T_{write} = MN \cdot outB/W_{GM}$。</p>
|
||||
<p> IterBatch($b_{core}$ 个 batch/核,unitflag 交叠 batch 间 drain/startup):</p>
|
||||
<div class="math"> $$T_{iter} = b_{core} \cdot n_K \cdot \max(T_{load}, T_{comp}) + T_{comp} + T_{write}$$</div>
|
||||
<p> MergeBatch(合并后 $k_{L1}$ 减半 → $n_K$ 翻倍,每分块搬移量不变,每分块计算量 ×b₀,合并 batch 数 = $b_{core}/b_0$):</p>
|
||||
<div class="math"> $$T_{mb} = b_{core} \cdot n_K \cdot \max(T_{load},\; b_0 \cdot T_{comp}) + b_0(T_{comp} + T_{write})$$</div>
|
||||
<p> 条件 5 保证合并后仍访存 Bound($T_{load} > b_0 \cdot T_{comp}$),此时:</p>
|
||||
<p> *执行模型*:两分支的核间切分相同——B 维切分到 C 核,每核 $b_{core} = B/C$ 个 batch;核内不切 M/N。差异在核内 K 维处理:</p>
|
||||
<ul class="tight">
|
||||
<li><b>IterBatch</b>(形态 d):每 batch 切 K 为 $n_K = \lceil K/k_{L1} \rceil$ 块,逐块流水(MTE2 搬 $A[M,k_{L1}]+B[k_{L1},N]$→L1→L0→Cube 部分和累加 L0C),最后一块算完 fixpipe 排空 L0C→GM</li>
|
||||
<li><b>MergeBatch</b>:$b_0$ 个 batch 合并为 $[b_0M, K]@[K, b_0N]$,切 K 为 $n_K^m$ 块,同理流水</li>
|
||||
</ul>
|
||||
<p> *符号*:</p>
|
||||
<table><tr><th>符号</th><th>含义</th><th>表达式</th></tr>
|
||||
<tr><td>$k_{L1}$</td><td>L1 级 K 分块粒度(双缓冲)</td><td>$\min\big(K,\; L1/(2(M{+}N)\cdot\text{dtype})\big)$</td></tr>
|
||||
<tr><td>$n_K$</td><td>K 分块数</td><td>$\lceil K/k_{L1} \rceil$</td></tr>
|
||||
<tr><td>$T_{load}$</td><td>每 K 分块搬移时延</td><td>$k_{L1}(M{+}N)\cdot\text{dtype}/BW_{pc}$</td></tr>
|
||||
<tr><td>$T_{comp}$</td><td>每 K 分块计算时延</td><td>$2MN \cdot k_{L1}/Q_{16}$</td></tr>
|
||||
<tr><td>$T_{write}$</td><td>单 batch 输出写回时延</td><td>$MN \cdot outB/W_{GM}$</td></tr>
|
||||
<tr><td>$T_{bd}$</td><td>batch 边界固定开销</td><td>fixpipe 同步 + L1 状态切换 + 流水线冲刷</td></tr>
|
||||
<tr><td>$BW_{pc}$</td><td>单核 GM 带宽份额</td><td>$W_{GM}/C$</td></tr></table>
|
||||
<p> *一阶流水模型*(unitflag 交叠 batch 间 drain/startup):</p>
|
||||
<div class="math"> $$T_{iter} = b_{core} \cdot n_K \cdot \max(T_{load},\, T_{comp}) + T_{comp} + T_{write}$$</div>
|
||||
<p> MergeBatch 合并后 $k_{L1}^m = \min(K,\; k_{L1}/b_0)$——L1 绑定($k_{L1}<K$)时 $k_{L1}^m = k_{L1}/b_0$;K 截断($k_{L1}=K$)时 $k_{L1}^m = K$ 不减半。以 L1 绑定为例:</p>
|
||||
<div class="math"> $$T_{mb} = b_{core} \cdot n_K \cdot \max(T_{load},\; b_0 T_{comp}) + b_0(T_{comp} + T_{write})$$</div>
|
||||
<p> 条件 5 保证合并后仍访存 Bound($T_{load} > b_0 T_{comp}$),此时:</p>
|
||||
<div class="math"> $$T_{mb} - T_{iter} = (b_0-1)(T_{comp} + T_{write}) > 0$$</div>
|
||||
<p> <b>一阶模型下 MergeBatch 始终不优于 IterBatch</b>——稳态吞吐相同(总搬移量、每块大小、总块数都相同),MergeBatch 的 drain 暴露是 IterBatch 的 $b_0$ 倍。</p>
|
||||
<p> *二阶修正——batch 边界固定开销*:每个 batch 边界有固定开销 $T_{bd}$(fixpipe 同步、L1 状态切换、流水线冲刷),MergeBatch 边界数少 $b_0$ 倍:</p>
|
||||
<p> *二阶修正——batch 边界固定开销*:每 batch 边界有固定开销 $T_{bd}$,MergeBatch 边界数少 $b_0$ 倍:</p>
|
||||
<div class="math"> $$T_{iter} = \text{一阶} + b_{core} \cdot T_{bd},\qquad T_{mb} = \text{一阶} + \frac{b_{core}}{b_0} \cdot T_{bd}$$</div>
|
||||
<p> MergeBatch 净收益 = 边界节省 - drain 惩罚:</p>
|
||||
<div class="math"> $$\Delta = b_{core}\Big(1-\frac{1}{b_0}\Big) T_{bd} - (b_0-1)(T_{comp} + T_{write})$$</div>
|
||||
<p> <b>MergeBatch 优于 IterBatch 的分界条件</b>:</p>
|
||||
<div class="math"> $$b_{core} > \frac{b_0 \cdot (T_{comp} + T_{write})}{T_{bd}}$$</div>
|
||||
<p> $T_{comp}$ 的取值分两种情形——$k_{L1}$ 被 L1 绑定($k_{L1} < K$)时 $T_{comp}$ 为单 K 分块计算;$k_{L1}$ 被 K 截断($k_{L1} = K$,单分块)时 MergeBatch 的 $k_{L1}$ 不减半 → $T_{comp}^m = b_0^2 \cdot T_{comp}$,惩罚升至 $(b_0^2-1)T_{comp} + (b_0-1)T_{write}$,分界更严格。</p>
|
||||
<p> 条件 1($b_{core} \ge 2b_0$)是该分界在典型 $T_{bd}$ 下的保守近似:$b_{core} \ge 4$ 对应 $T_{bd} \ge b_0(T_{comp}+T_{write})/4$。</p>
|
||||
<p> <b>L0C 利用率说明</b>:小 MN 时 IterBatch 的 L0C tile($MN \cdot 4\text{B}$)远小于 L0C 容量(256KB),MergeBatch 合并后 $b_0^2 MN \cdot 4\text{B}$ 更接近满载。但访存 Bound 下计算被搬移掩盖,L0C 利用率不影响总时延——<b>不构成 MergeBatch 的优势</b>。</p>
|
||||
<p> <b>分界条件</b>(MergeBatch 优于 IterBatch 当且仅当 $\Delta = T_{mb} - T_{iter} < 0$):</p>
|
||||
<div class="math"> $$b_{core} > \frac{b_0 \cdot \text{penalty}}{T_{bd}},\qquad
|
||||
\text{penalty} = \begin{cases} (b_0-1)(T_{comp} + T_{write}) & \text{L1 绑定(}k_{L1} < K\text{)} \\ (b_0^2-1)T_{comp} + (b_0-1)T_{write} & \text{K 截断(}k_{L1} = K\text{)} \end{cases}$$</div>
|
||||
<p> K 截断时 MergeBatch 的 $k_{L1}$ 不减半 → 每分块计算量 $b_0^2$ 倍(而非 $b_0$ 倍)→ drain 惩罚更大。小 MN 时 $T_{comp}$ 小 → penalty 小 → MergeBatch 更容易赢;大 B 时 $b_{core}$ 大 → 边界节省多 → MergeBatch 更容易赢。</p>
|
||||
<p> 条件 1($b_{core} \ge 2b_0$)是该分界在典型 $T_{bd}$ 下的保守近似。精确边界依赖 $T_{bd}$ 实测标定。</p>
|
||||
<p> <b>L0C 利用率说明</b>:小 MN 时 IterBatch 的 L0C tile($MN \cdot 4\text{B}$)远小于 L0C 容量,MergeBatch 合并后更接近满载。但访存 Bound 下计算被搬移掩盖,L0C 利用率不影响总时延——<b>不构成 MergeBatch 的优势</b>。</p>
|
||||
<ol class="tight">
|
||||
<li><b>L0C 容量</b>:合并 $b_0$ 个 batch 的输出块 $[b_0M, b_0N]$(FP32 累加、双缓冲两份)必须放得下 L0C;连最小合并都放不下,合并无从谈起。</li>
|
||||
<li><b>单核搬移总量</b>:单核搬移数据总量低于 min_DatamountPerCore 时,GM 带宽利用率上不去(重要性第 2 位的经验约束)。</li>
|
||||
|
||||
Reference in New Issue
Block a user