v1.2: 同步HTML
This commit is contained in:
@@ -174,16 +174,27 @@ $$</div>
|
||||
\frac{\Delta T_{saved}}{T_{total}} \approx \frac{1 - 1/s}{n_{wave}}
|
||||
$$</div>
|
||||
<p>$n_{wave} = 2$、$s = C/r$ 时:$r=16$ → 收益 25%;$r=8$ → 收益 37.5%。$n_{wave} = 3$ 时:$r=16$ → 16.7%;$r=8$ → 25%。**$n_{wave} \le 3$ 时收益显著,应重切。**</p>
|
||||
<p>*重切约束*(小块仍须满足搬移效率和对齐):</p>
|
||||
<p>*重切约束的推导*:沿 N 切 $s$ 份后,小块的 N 维度变为 $\text{singleCoreN}_{tail} = \text{singleCoreN}/s$。小块仍须满足两类约束:</p>
|
||||
<ol class="tight">
|
||||
<li><b>搬移效率</b>(与主 tile 同一标准):GM→L1 搬移 B 矩阵时,dValue = $k_{L1} \cdot \text{singleCoreN}_{tail} \cdot \text{dtype}$。v0.98 §六约束 3 要求 dValue ≥ min_TileSize(推荐 16KB,带宽利用率保障);硬件最低要求 dValue ≥ 256B(DMA 突发下限)。两级阈值:</li>
|
||||
</ol>
|
||||
<div class="math">$$
|
||||
s \le \frac{\text{singleCoreN} \cdot k_{L1} \cdot \text{dtype}}{256\text{B}} \quad (\text{沿 N 切}),\qquad s \le \frac{\text{singleCoreM}}{16} \quad (\text{16 对齐})
|
||||
s \le \frac{k_{L1} \cdot \text{singleCoreN} \cdot \text{dtype}}{min\_TileSize} \quad (\text{推荐}),\qquad s \le \frac{k_{L1} \cdot \text{singleCoreN} \cdot \text{dtype}}{256\text{B}} \quad (\text{硬件底线})
|
||||
$$</div>
|
||||
<p>*最优切分因子*:在不违反约束的前提下尽量让 $r \cdot s$ 接近 $C$:</p>
|
||||
<ol class="tight">
|
||||
<li><b>对齐</b>:$\text{singleCoreN}_{tail} \ge 16$(Cube 基本块 N 向粒度):</li>
|
||||
</ol>
|
||||
<div class="math">$$
|
||||
s^* = \min\Big(\Big\lfloor \frac{C}{r} \Big\rfloor,\; \frac{\text{singleCoreN} \cdot k_{L1} \cdot \text{dtype}}{256\text{B}},\; \frac{\text{singleCoreM}}{16}\Big)
|
||||
s \le \frac{\text{singleCoreN}}{16}
|
||||
$$</div>
|
||||
<p>*例*(C=32、$N_{blk}=40$、$n_{wave}=2$、$r=8$、singleCoreM=singleCoreN=256、$k_{L1}$=128、BF16):$s^* = \min(4,\; 256,\; 16) = 4$。尾轮 8 块沿 N 切 4 份 → 32 个小块(每块 [256, 64]),32 核满载,尾波时延从 $T_{block}$ 降至 $T_{block}/4$。总时延节省 37.5%。</p>
|
||||
<p>*切分方向选择*:优先沿 N 切(保持 A 行带完整,L2 中 A 数据不变);若 N 向约束不满足($s$ 被 dValue 卡住),改沿 M 切。M/N 都不可行时退化为不重切。</p>
|
||||
<p>沿 M 切时对称(singleCoreM 替换 singleCoreN,dValue 约束作用于 A 矩阵的 $\text{singleCoreM}_{tail} \cdot k_{L1} \cdot \text{dtype}$)。</p>
|
||||
<p>*最优切分因子*:在不违反上述约束的前提下尽量让 $r \cdot s$ 接近 $C$。优先用推荐阈值(min_TileSize),若 $s$ 太小导致 $r \cdot s \ll C$(重切收益不明显),退而用硬件底线(256B):</p>
|
||||
<div class="math">$$
|
||||
s^* = \min\Big(\Big\lfloor \frac{C}{r} \Big\rfloor,\; \frac{k_{L1} \cdot \text{singleCoreN} \cdot \text{dtype}}{min\_TileSize},\; \frac{\text{singleCoreN}}{16}\Big)
|
||||
$$</div>
|
||||
<p>若 $r \cdot s^* < C/2$(重切后仍不满半),改用硬件底线重算 $s^*$;若仍 $< C/2$,退化为不重切。</p>
|
||||
<p>*例*(C=32、$N_{blk}=40$、$n_{wave}=2$、$r=8$、singleCoreM=singleCoreN=256、$k_{L1}$=128、BF16):推荐阈值 $s \le 128 \times 256 \times 2 / 16384 = 4$;对齐 $s \le 256/16 = 16$;$\lfloor C/r \rfloor = 4$。$s^* = \min(4, 4, 16) = 4$。尾轮 8 块沿 N 切 4 份 → 32 个小块(每块 [256, 64]),32 核满载,尾波时延从 $T_{block}$ 降至 $T_{block}/4$。总时延节省 37.5%。</p>
|
||||
<p>*切分方向选择*:优先沿 N 切(保持 A 行带完整,L2 中 A 数据不变);若 N 向约束不满足($s^*$ 被 min_TileSize 或对齐卡住),改沿 M 切。M/N 都不可行时退化为不重切。</p>
|
||||
<p><b>结论</b>:$n_{wave} \le 3$ 且 $r < C$ 时应重切尾轮——host 端零代价,NPU 端收益 $T_{block}(1-1/s^*)$。$n_{wave} \ge 4$ 时收益 < 25%,可不重切(通过选择使尾波占比小的 mCnt/nCnt 组合来优化)。</p>
|
||||
<h3>5.3 尾轮影响的量化</h3>
|
||||
<p>设总块数 $N_{blk} = B \cdot mCnt \cdot nCnt$,总波数 $n_{wave} = \lceil N_{blk} / C \rceil$,尾波块数 $r = N_{blk} \bmod C$($r = 0$ 时无尾波)。</p>
|
||||
|
||||
Reference in New Issue
Block a user