第十章:加方法论说明、密集采样(3.2亿case)、线性对比
This commit is contained in:
@@ -365,22 +365,26 @@ $$</div>
|
||||
</ul>
|
||||
<hr>
|
||||
<h2>十、case 遍历:各分支的覆盖区域</h2>
|
||||
<p>对 $B \in [1, 2048]$、$M,N,K \in [1, 10240]$ 按对数网格采样 20736 个 case,严格按上述进入条件分类(BF16),结果:</p>
|
||||
<h3>分支覆盖统计</h3>
|
||||
<h3>方法论说明</h3>
|
||||
<p><b>采样方式</b>:B ∈ [1, 2048] 全量遍历(2048 个值),M/N/K ∈ [1, 10240] 对数网格采样 60 点/维(值按指数增长:1, 2, 3, 5, 7, 10, 14, 19, 26, 35, ...)。总 case 数 3.2 亿,耗时约 4 分钟。</p>
|
||||
<p><b>为什么不做全量遍历</b>:全量 = 2048 × 10240³ ≈ 2.2×10¹⁵ 个 case。Python 分类器约需 1400 万小时,C 实现约需 6 万小时——完全不可行。对数采样在小值区密集、大值区稀疏,恰好覆盖了分支边界集中的区域。</p>
|
||||
<p><b>分布依赖测度</b>:对数均匀采样和线性均匀采样给出的分支占比<b>不同</b>。对数采样在小值区密集,特殊分支(K=0/1)、降核 ASW(P 小)、StreamK(K 大但 M/N 小)的占比被放大;线性采样被大 shape 主导(M/N/K > 512 占 [1,10240] 的 95%+),ASW_Basic 占比显著升高。<b>本文遍历的目的是验证覆盖性(无空洞),不是统计真实工作负载的分布。</b></p>
|
||||
<h3>分支覆盖统计(对数采样,B 全量 2048,M/N/K 60 点/维,共 3.2 亿 case)</h3>
|
||||
<table><tr><th>分支</th><th>case 数</th><th>占比</th><th>B 范围</th><th>区域特征</th></tr>
|
||||
<tr><td>ASW_Basic</td><td>7290</td><td>35.2%</td><td>2 ~ 2048</td><td>通用:B<C 且 P≥C;或 B≥C 但 L1 四形态不满足(M/N 大)</td></tr>
|
||||
<tr><td>IterBatch</td><td>4544</td><td>21.9%</td><td>32 ~ 2048</td><td>B≥C、负载均衡、L1 四形态之一满足</td></tr>
|
||||
<tr><td>降核 ASW_Basic</td><td>3288</td><td>15.9%</td><td>2 ~ 128</td><td>P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核(定义与实现见 §八.6)</td></tr>
|
||||
<tr><td>特殊分支</td><td>1728</td><td>8.3%</td><td>任意</td><td>K=0 / K=1</td></tr>
|
||||
<tr><td>MergeBatch</td><td>1674</td><td>8.1%</td><td>128 ~ 2048</td><td>$b_{core}\ge 4$ 且 $MN \le L0C/(2b_0^2\cdot4\text{B})=8192$ 等五条全过</td></tr>
|
||||
<tr><td>转Matmul</td><td>1584</td><td>7.6%</td><td>B=1</td><td>单边 batch=1</td></tr>
|
||||
<tr><td>StreamK</td><td>628</td><td>3.0%</td><td>2 ~ 128</td><td>P<C/2 且 K≥8192</td></tr></table>
|
||||
<h3>IterBatch 四形态命中分布</h3>
|
||||
<table><tr><th>形态</th><th>命中数</th><th>说明</th></tr>
|
||||
<tr><td>b) 双 batch 乒乓</td><td>1787</td><td>最多:B 大且单 batch 较小</td></tr>
|
||||
<tr><td>d) 两侧切 K</td><td>1456</td><td>次之:K 可切段的通用兜底</td></tr>
|
||||
<tr><td>c) 一侧驻留+对侧切 K</td><td>773</td><td>单侧可驻留(含 b_core≥2 的半预算预取档 522 个)</td></tr>
|
||||
<tr><td>a) 单 batch 全驻留</td><td>528</td><td>B=C 附近</td></tr></table>
|
||||
<tr><td>ASW_Basic</td><td>1.75 亿</td><td>54.1%</td><td>2 ~ 2048</td><td>通用:B<C 且 P≥C;或 B≥C 但 L1 四形态不满足(M/N 大)</td></tr>
|
||||
<tr><td>MergeBatch</td><td>6303 万</td><td>19.5%</td><td>97 ~ 2048</td><td>$b_{core}\ge 4$ 且 $MN \le 8192$ 等五条全过</td></tr>
|
||||
<tr><td>降核 ASW_Basic</td><td>4051 万</td><td>12.6%</td><td>2 ~ 2048</td><td>P<C 且 K 不满足 StreamK 阈值 → 只用 ⌈P⌉ 核</td></tr>
|
||||
<tr><td>IterBatch</td><td>3804 万</td><td>11.8%</td><td>32 ~ 2048</td><td>B≥C、负载均衡、L1 四形态之一满足</td></tr>
|
||||
<tr><td>特殊分支</td><td>597 万</td><td>1.9%</td><td>任意</td><td>K=0 / K=1</td></tr>
|
||||
<tr><td>StreamK</td><td>25 万</td><td>0.08%</td><td>2 ~ 128</td><td>P<C/2 且 K≥8192</td></tr>
|
||||
<tr><td>转Matmul</td><td>15 万</td><td>0.05%</td><td>B=1</td><td>单边 batch=1</td></tr></table>
|
||||
<p><b>对照:线性等距采样</b>(M/N/K 步长 256,B 全量,共 1.3 亿 case)下 ASW_Basic 占比升至 92.1%,MergeBatch 降至 3.6%——因为线性采样被大 shape 主导。两种测度的结论一致:<b>无空分支、无覆盖空洞</b>,只是占比不同。</p>
|
||||
<h3>IterBatch 四形态命中分布(对数采样)</h3>
|
||||
<table><tr><th>形态</th><th>命中数</th><th>占比</th><th>说明</th></tr>
|
||||
<tr><td>b) 双 batch 乒乓</td><td>2684 万</td><td>70.5%</td><td>最多:B 大且单 batch 较小</td></tr>
|
||||
<tr><td>d) 两侧切 K</td><td>741 万</td><td>19.5%</td><td>次之:K 可切段的通用兜底</td></tr>
|
||||
<tr><td>c) 一侧驻留+对侧切 K</td><td>370 万</td><td>9.7%</td><td>单侧可驻留(含 b_core≥2 的半预算预取档)</td></tr>
|
||||
<tr><td>a) 单 batch 全驻留</td><td>9 万</td><td>0.2%</td><td>B=C 附近的窄区</td></tr></table>
|
||||
<h3>典型边界 case</h3>
|
||||
<table><tr><th>B</th><th>M</th><th>N</th><th>K</th><th>分支</th><th>说明</th></tr>
|
||||
<tr><td>1</td><td>2048</td><td>2048</td><td>2048</td><td>转Matmul</td><td>单 batch 纯 Matmul</td></tr>
|
||||
@@ -396,11 +400,11 @@ $$</div>
|
||||
<tr><td>64</td><td>64</td><td>64</td><td>8192</td><td>IterBatch</td><td>小 M×N 但 K 大,形态 d</td></tr></table>
|
||||
<h3>遍历结论</h3>
|
||||
<ol class="tight">
|
||||
<li><b>六个分支全部有真实 case 命中</b>,无空分支;覆盖矩阵无空洞(P<C 且 K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小,调度开销主导,分支选择不敏感);</li>
|
||||
<li><b>七个分支全部有真实 case 命中</b>,无空分支;覆盖矩阵无空洞(P<C 且 K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小,调度开销主导,分支选择不敏感);</li>
|
||||
<li>**MergeBatch 的区域由条件 2($MN \le 8192$)与条件 3(min_DatamountPerCore)夹出**:小 M×N 且单核搬移量足够的大 batch case,两个条件缺一不可。典型分界对照:B=128/M=N=64 时 K=256 → 单核搬移 256KB 不达标落 IterBatch,K=512 → 512KB 达标进 MergeBatch;</li>
|
||||
<li><b>IterBatch 与 ASW_Basic 的分界就是 L1 四形态是否满足</b>:单 batch 输入 $(MK+KN)\cdot\text{dtype}$ 相对 L1 的比例决定归属——这正是"核内零重复读"原则的定量体现;</li>
|
||||
<li><b>StreamK 的区域为 P<C/2 且 K≥8192</b>:B 小、M/N 小、K 大的"细长" case;C/2 ≤ P < C 且 K 大的 98 个 case 由降核 ASW_Basic 承接(切 2 路 K 会超核数,不切又不满核,不如直接用 ⌈P⌉ 核);</li>
|
||||
<li><b>降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿</b>(B∈[2,128],占 15.4%):并行度凑不满、切 K 又不划算时,只用 ⌈P⌉ 个核、每核一个 L0C 满载输出块,比强行碎切(tile 跌破搬移效率下限)更快。</li>
|
||||
<li><b>StreamK 的区域为 P<C/2 且 K≥8192</b>:B 小、M/N 小、K 大的"细长" case;C/2 ≤ P < C 且 K 大的 case 由降核 ASW_Basic 承接(切 2 路 K 会超核数,不切又不满核,不如直接用 ⌈P⌉ 核);</li>
|
||||
<li><b>降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿</b>(占 12.6%):并行度凑不满、切 K 又不划算时,只用 ⌈P⌉ 个核、每核一个 L0C 满载输出块,比强行碎切(tile 跌破搬移效率下限)更快。</li>
|
||||
</ol>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user