v1.5: 同步HTML
This commit is contained in:
@@ -287,14 +287,50 @@ $$</div>
|
||||
<p>*SingleCoreM/N 的具体确定过程*(host 端枚举,与尾轮处理联动):</p>
|
||||
<ol class="tight">
|
||||
<li>计算最少切分 $P = \lceil C/B \rceil$</li>
|
||||
<li><b>若 P = 1</b>:$mCnt = nCnt = 1$,$\text{singleCoreM} = M$、$\text{singleCoreN} = N$;检查约束 2(L1 容量)与约束 3(dValue):满足则确定;不满足则 K 分块($k_{L1} = \lfloor L1/(2(M{+}N) \cdot dtype) \rfloor_{16}$,须 $k_{L1} \cdot dtype \ge 256\text{B}$),仍不满足则进入步骤 3</li>
|
||||
<li><b>若 P > 1</b>:枚举 $(mCnt, nCnt)$,$mCnt \cdot nCnt \ge P$,从 $\sqrt{PM/N}$ 附近的整数开始(方形优先),检查约束 2/3/4(L1 容量、搬移效率、BaseM/N 整数倍)</li>
|
||||
<li>计算尾波占比:$r = B \cdot mCnt \cdot nCnt \bmod C$,优先选 $r = 0$ 或 $r$ 大的组合</li>
|
||||
<li>若 $n_{wave} = \lceil B \cdot mCnt \cdot nCnt / C \rceil \le 3$ 且 $r > 0$,计算尾轮重切参数 $s^*$ 并评估重切后收益</li>
|
||||
<li>选总时延最短的组合:$T_{total} = (n_{wave} - 1) \cdot T_{block} + T_{tail}$,其中 $T_{tail} = T_{block}/s^*$(重切)或 $T_{block}$(不重切)</li>
|
||||
<li><b>若 P = 1(B ≥ C)</b>:先试不切分 $mCnt = nCnt = 1$、$\text{singleCoreM} = M$、$\text{singleCoreN} = N$;由约束 2 求 $k_{L1} = \min(K,\; \lfloor L1/(2(M{+}N) \cdot dtype) \rfloor_{16})$,检查约束 3($k_{L1} \cdot dtype \ge 256\text{B}$ 等);满足则确定。不满足(L1 放不下且 $k_{L1}$ 降无可降)则进入步骤 3 强制切分</li>
|
||||
<li><b>若 P > 1(必须切分)——完整枚举</b>。枚举不是随意挑几个组合试,而是<b>遍历整个可行空间、每个候选计算搬入时延、取最优</b>:</li>
|
||||
</ol>
|
||||
<p>*与源码的差异*:源码用 cubeBound 模型 + balanceRate ≥ 0.9 剪枝,不解耦 SingleCoreM/N 与 BaseM/N(baseM=256 已是 SingleCore 级参数,L0 tile 由 stepM/stepN 二次切分)。理论的两层分离使约束链更清晰——SingleCoreM/N 由 L1 + 并行度 + 搬移效率决定,BaseM/N 由 L0C 决定,各司其职。</p>
|
||||
<p>*例*(B=8、M=N=2048、K=1024、BF16):$\lceil C/B \rceil = 4$,取 $mCnt = nCnt = 2$ → singleCoreM = singleCoreN = 1024。BaseM = BaseN = $\lfloor\sqrt{32768}\rfloor_{16} = 176$。SingleCoreM/BaseM = 1024/176 ≈ 5.8 → 取 5(整数倍)→ singleCoreM = 880。约束 2:$k_{L1} \le 512\text{KB}/(2 \times 1760 \times 2\text{B}) = 74$ → 取 64(16 对齐)= 128B ✓。</p>
|
||||
<p> <b>a. 枚举空间(有界)</b>:由约束 4 给出上界 $mCnt \le \lceil M/\text{BaseM} \rceil$、$nCnt \le \lceil N/\text{BaseN} \rceil$(SingleCore 不能小于 Base),约束 1 给出 $B \cdot mCnt \cdot nCnt \ge C$。候选数最多 $\lceil M/\text{BaseM} \rceil \times \lceil N/\text{BaseN} \rceil$(如 M=N=4096、Base=256 时 256 个),host 端遍历开销可忽略</p>
|
||||
<p> <b>b. 每个候选的评估流水线</b>($(mCnt, nCnt) \to$ 对齐 $\to$ 约束过滤 $\to$ 目标值):</p>
|
||||
<div class="math"> $$
|
||||
\text{singleCoreM} = \text{Align}_{16}\Big(\Big\lceil \frac{M}{mCnt} \Big\rceil\Big),\qquad \text{singleCoreN} = \text{Align}_{16}\Big(\Big\lceil \frac{N}{nCnt} \Big\rceil\Big)
|
||||
$$</div>
|
||||
<p> *约束 4 过滤*:singleCoreM/singleCoreN 是 BaseM/BaseN 的整数倍;*约束 2 求 $k_{L1}$*:</p>
|
||||
<div class="math"> $$
|
||||
k_{L1} = \min\Big(K,\; \Big\lfloor \frac{L1}{2 \cdot (\text{singleCoreM} + \text{singleCoreN}) \cdot dtype} \Big\rfloor_{16}\Big)
|
||||
$$</div>
|
||||
<p> *约束 3 过滤*:$k_{L1} \cdot dtype \ge 256\text{B}$ 且 $\text{singleCoreM} \cdot k_{L1} \cdot dtype \ge min\_TileSize$ 且 $k_{L1} \cdot \text{singleCoreN} \cdot dtype \ge min\_TileSize$</p>
|
||||
<p> *目标值(§3 时延模型的搬移项)*:</p>
|
||||
<div class="math"> $$
|
||||
T_{MTE2} = \frac{MN}{C/B} \cdot \Big(\frac{1}{\text{singleCoreM}} + \frac{1}{\text{singleCoreN}}\Big) \cdot \frac{k_{L1} \cdot dtype}{BW_{pc}}
|
||||
$$</div>
|
||||
<p> **c. 为什么目标函数是 $T_{MTE2}$**:$T_{MMAD} = 2BMNK/(C \cdot Q_{16})$ 与 $T_{FIX} = B \cdot MN \cdot outB/(C \cdot W_{pc})$ 只依赖全量 B/M/N/K,<b>与切分无关</b>——候选之间的唯一差异在搬入时延(§3)。约束 2/3/4 只是可行性过滤,<b>不足以选最优</b>:多个可行解的 $T_{MTE2}$ 可差 2 倍(§6.3 源码过度切分示例)</p>
|
||||
<p> <b>d. 最优选取</b>:通过全部约束的候选中取 $T_{MTE2}$ 最小者;并列时取尾轮块数 $r = B \cdot mCnt \cdot nCnt \bmod C$ 最大者(尾轮块越多,§5.3 重切的 $s^*$ 越小、越省)</p>
|
||||
<ol class="tight">
|
||||
<li><b>尾轮修正</b>:$n_{wave} = \lceil B \cdot mCnt \cdot nCnt / C \rceil \le 3$ 且 $r > 0$ 时,按 §5.3 计算重切因子 $s^*$,尾轮时延 $T_{tail} = T_{block}/s^*$;否则 $T_{tail} = T_{block}$(r=0 时为 0)</li>
|
||||
</ol>
|
||||
<ol class="tight">
|
||||
<li><b>端到端校验</b>:$T = \max(T_{MTE2},\; T_{MMAD},\; T_{FIX}) + T_{tail}$。若选出的候选 $T_{MTE2} < T_{MMAD}$(搬移被计算掩盖),候选间差异失效,此时以尾轮最优者为准</li>
|
||||
</ol>
|
||||
<p>*完整实例*(B=8、M=N=2048、K=1024、BF16,BaseM=BaseN=256、$min\_TileSize$=16KB):</p>
|
||||
<ul class="tight">
|
||||
<li>$P = \lceil 32/8 \rceil = 4$,进入步骤 3。枚举空间 $mCnt, nCnt \le \lceil 2048/256 \rceil = 8$,$8 \cdot mCnt \cdot nCnt \ge 32$</li>
|
||||
<li>枚举与评估:</li>
|
||||
</ul>
|
||||
<table><tr><th>(mCnt, nCnt)</th><th>sM × sN</th><th>$k_{L1}$(约束 2 上限,16 对齐)</th><th>约束 3 过滤</th><th>$T_{MTE2} \propto (1/sM + 1/sN) \cdot k_{L1}$</th></tr>
|
||||
<tr><td>(2, 2)</td><td>1024 × 1024</td><td>64(128B)</td><td>✗ dValue < 256B</td><td>—</td></tr>
|
||||
<tr><td>(4, 2)</td><td>512 × 1024</td><td>80(160B)</td><td>✗</td><td>—</td></tr>
|
||||
<tr><td>(4, 4)</td><td>512 × 512</td><td>128(256B)</td><td>✓(512×128×2 = 128KB ≥ 16KB)</td><td>0.500</td></tr>
|
||||
<tr><td>(8, 4)</td><td>256 × 512</td><td>160(320B)</td><td>✓</td><td>0.938</td></tr>
|
||||
<tr><td>(4, 8)</td><td>512 × 256</td><td>160</td><td>✓</td><td>0.938</td></tr>
|
||||
<tr><td>(8, 8)</td><td>256 × 256</td><td>256(512B)</td><td>✓</td><td>2.000</td></tr></table>
|
||||
<p> $k_{L1}$ 上限公式:$\lfloor 131072/(sM{+}sN) \rfloor$(131072 = L1/(2·dtype) = 512KB/4B)。评估过程展示三个要点:</p>
|
||||
<ol class="tight">
|
||||
<li><b>最少切分 (2,2) 不可行</b>:$k_{L1} \le 64$ 元素 = 128B,违反 dValue ≥ 256B——若只做约束 1(并行度)检查会在 (2,2) 上误判达标,必须连同约束 2/3 一起过滤;</li>
|
||||
<li><b>多个候选通过约束</b>:(4,4)、(8,4)、(4,8)、(8,8) 都满足约束 2/3/4——<b>约束检查不足以选最优</b>,必须计算目标函数;</li>
|
||||
<li>**目标函数 $T_{MTE2}$ 定最优**:拉格朗日方形点 (4,4) 的搬入时延 0.500 最小(比 (8,4) 省 47%、比 (8,8) 省 75%)。注意此处 $k_{L1}$ 是变量(K=1024 未截断、由 L1 容量决定),故 $T_{MTE2} \propto (1/sM + 1/sN) \cdot k_{L1}$ 而非 §5.2 的简化式 $(1/sM + 1/sN)$。最终 (4,4):总块数 $8 \times 16 = 128$,$r = 128 \bmod 32 = 0$ 完美整除、无尾轮</li>
|
||||
</ol>
|
||||
<p>*与源码的差异*:源码用 cubeBound 模型 + balanceRate ≥ 0.9 剪枝,不解耦 SingleCoreM/N 与 BaseM/N(baseM=256 已是 SingleCore 级参数,L0 tile 由 stepM/stepN 二次切分),且枚举目标为"算存比/负载均衡帕累托"而非"搬入时延最小"。理论的两层分离使约束链更清晰、目标函数($T_{MTE2}$)有闭式表达——SingleCoreM/N 由 L1 + 并行度 + 搬移效率决定,BaseM/N 由 L0C 决定,各司其职。</p>
|
||||
<h3>5.3 mCnt / nCnt 与核间分配(含尾轮处理)</h3>
|
||||
<div class="math">$$
|
||||
mCnt = \Big\lceil \frac{M}{\text{singleCoreM}} \Big\rceil,\qquad nCnt = \Big\lceil \frac{N}{\text{singleCoreN}} \Big\rceil
|
||||
|
||||
Reference in New Issue
Block a user