v1.0: 同步HTML
This commit is contained in:
@@ -41,7 +41,7 @@ MathJax = {
|
|||||||
<body>
|
<body>
|
||||||
<div class="page">
|
<div class="page">
|
||||||
<h1>MergeBatch vs IterBatch:BMM 小 tile 场景的两种实现路径分析</h1>
|
<h1>MergeBatch vs IterBatch:BMM 小 tile 场景的两种实现路径分析</h1>
|
||||||
<blockquote>目标芯片:昇腾 950PR(DAV_3510)。理论分析基于《BMM 算子优化分析 v0.96》,源码参考 [cann-ops-nn](https://gitee.com/ascend/cann-ops-nn) 中 <code>matmul/batch_mat_mul_v3</code> 实现。</blockquote>
|
<blockquote>目标芯片:昇腾 950PR(DAV_3510)。理论分析基于《BMM 算子优化分析 v0.96》,源码参考 [cann-ops-nn](https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3) 实现。</blockquote>
|
||||||
<hr>
|
<hr>
|
||||||
<h2>一、问题定义</h2>
|
<h2>一、问题定义</h2>
|
||||||
<p>BMM(BatchMatMul)中,当 B ≥ C(batch 数 ≥ AIC 核数)时,核间切 B 是免费的——每核独立处理若干 batch,无共享无依赖。核内的两种实现路径:</p>
|
<p>BMM(BatchMatMul)中,当 B ≥ C(batch 数 ≥ AIC 核数)时,核间切 B 是免费的——每核独立处理若干 batch,无共享无依赖。核内的两种实现路径:</p>
|
||||||
@@ -146,7 +146,7 @@ $$</div>
|
|||||||
<h2>五、与源码实现的对比</h2>
|
<h2>五、与源码实现的对比</h2>
|
||||||
<h3>5.1 MergeBatch 源码(<code>batch_matmul_v3_mergebatch_basicapi_tiling.cpp</code>)</h3>
|
<h3>5.1 MergeBatch 源码(<code>batch_matmul_v3_mergebatch_basicapi_tiling.cpp</code>)</h3>
|
||||||
<p><b>IsCapable 条件</b>:</p>
|
<p><b>IsCapable 条件</b>:</p>
|
||||||
<pre><code>// 源码:https://gitee.com/ascend/cann-ops-nn
|
<pre><code>// 源码:https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3
|
||||||
if (batchC < MIN_BATCH_L0 * aicNum) return false; // B < 128,即 b_core < 4
|
if (batchC < MIN_BATCH_L0 * aicNum) return false; // B < 128,即 b_core < 4
|
||||||
if (alignK < 64 || M > N) return false; // K ≥ 64,M ≤ N
|
if (alignK < 64 || M > N) return false; // K ≥ 64,M ≤ N
|
||||||
if (L0 buffer check with b0=4) return false; // L0C 容量</code></pre>
|
if (L0 buffer check with b0=4) return false; // L0C 容量</code></pre>
|
||||||
@@ -162,7 +162,7 @@ if (L0 buffer check with b0=4) return false; // L0C 容量</code></pre>
|
|||||||
<p><b>结论</b>:源码的 MergeBatch 进入条件<b>偏宽</b>——缺少搬移量、tile 大小、算存比三条约束。可能导致不应进入的 case 被误捕获(如计算 Bound 的 case 进入 MergeBatch 后冗余计算成为瓶颈)。</p>
|
<p><b>结论</b>:源码的 MergeBatch 进入条件<b>偏宽</b>——缺少搬移量、tile 大小、算存比三条约束。可能导致不应进入的 case 被误捕获(如计算 Bound 的 case 进入 MergeBatch 后冗余计算成为瓶颈)。</p>
|
||||||
<h3>5.2 IterBatch 源码(<code>batch_matmul_v3_iterbatch_basicapi_tiling.cpp</code>)</h3>
|
<h3>5.2 IterBatch 源码(<code>batch_matmul_v3_iterbatch_basicapi_tiling.cpp</code>)</h3>
|
||||||
<p><b>IsCapable 条件</b>:</p>
|
<p><b>IsCapable 条件</b>:</p>
|
||||||
<pre><code>// 源码:https://gitee.com/ascend/cann-ops-nn
|
<pre><code>// 源码:https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3
|
||||||
if (batchC <= aicNum) return false; // B ≤ 32 不进 IterBatch
|
if (batchC <= aicNum) return false; // B ≤ 32 不进 IterBatch
|
||||||
if ((alignM*alignK + alignK*alignN)*dtype*2 > L1) return false; // L1 双缓冲
|
if ((alignM*alignK + alignK*alignN)*dtype*2 > L1) return false; // L1 双缓冲
|
||||||
if (!l0CanLoadBatch_ && balanceRate < 0.8) return false; // 负载均衡</code></pre>
|
if (!l0CanLoadBatch_ && balanceRate < 0.8) return false; // 负载均衡</code></pre>
|
||||||
@@ -190,7 +190,7 @@ if (!l0CanLoadBatch_ && balanceRate < 0.8) return false; // 负载
|
|||||||
<ol class="tight">
|
<ol class="tight">
|
||||||
<li>[昇腾 950 NPU 架构白皮书](https://public-download.obs.cn-east-2.myhuaweicloud.com/ascend/%E6%98%87%E8%85%BE950%20NPU%E6%9E%B6%E6%9E%84%E7%99%BD%E7%9A%AE%E4%B9%A6.pdf),华为技术有限公司,2026</li>
|
<li>[昇腾 950 NPU 架构白皮书](https://public-download.obs.cn-east-2.myhuaweicloud.com/ascend/%E6%98%87%E8%85%BE950%20NPU%E6%9E%B6%E6%9E%84%E7%99%BD%E7%9A%AE%E4%B9%A6.pdf),华为技术有限公司,2026</li>
|
||||||
<li>[CANN AscendC 算子开发——Matmul 高阶 API 使能 UnitFlag](https://www.hiascend.com/document/detail/zh/canncommercial/850/opdevg/Ascendcopdevg/atlas_ascendc_best_practices_10_10003.html),CANN 8.5.0</li>
|
<li>[CANN AscendC 算子开发——Matmul 高阶 API 使能 UnitFlag](https://www.hiascend.com/document/detail/zh/canncommercial/850/opdevg/Ascendcopdevg/atlas_ascendc_best_practices_10_10003.html),CANN 8.5.0</li>
|
||||||
<li>[cann-ops-nn 源码仓](https://gitee.com/ascend/cann-ops-nn),<code>matmul/batch_mat_mul_v3</code> 目录</li>
|
<li>[cann-ops-nn 源码仓](https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3)</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user