v1.0: 同步HTML

This commit is contained in:
2026-08-26 11:30:26 +00:00
parent 6f44201295
commit ad6a92fdde

View File

@@ -41,7 +41,7 @@ MathJax = {
<body> <body>
<div class="page"> <div class="page">
<h1>MergeBatch vs IterBatchBMM 小 tile 场景的两种实现路径分析</h1> <h1>MergeBatch vs IterBatchBMM 小 tile 场景的两种实现路径分析</h1>
<blockquote>目标芯片:昇腾 950PRDAV_3510。理论分析基于《BMM 算子优化分析 v0.96》,源码参考 [cann-ops-nn](https://gitee.com/ascend/cann-ops-nn) 中 <code>matmul/batch_mat_mul_v3</code> 实现。</blockquote> <blockquote>目标芯片:昇腾 950PRDAV_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>BMMBatchMatMul当 B ≥ Cbatch 数 ≥ AIC 核数)时,核间切 B 是免费的——每核独立处理若干 batch无共享无依赖。核内的两种实现路径</p> <p>BMMBatchMatMul当 B ≥ Cbatch 数 ≥ 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 &lt; MIN_BATCH_L0 * aicNum) return false; // B &lt; 128即 b_core &lt; 4 if (batchC &lt; MIN_BATCH_L0 * aicNum) return false; // B &lt; 128即 b_core &lt; 4
if (alignK &lt; 64 || M &gt; N) return false; // K ≥ 64M ≤ N if (alignK &lt; 64 || M &gt; N) return false; // K ≥ 64M ≤ 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 &lt;= aicNum) return false; // B ≤ 32 不进 IterBatch if (batchC &lt;= aicNum) return false; // B ≤ 32 不进 IterBatch
if ((alignM*alignK + alignK*alignN)*dtype*2 &gt; L1) return false; // L1 双缓冲 if ((alignM*alignK + alignK*alignN)*dtype*2 &gt; L1) return false; // L1 双缓冲
if (!l0CanLoadBatch_ &amp;&amp; balanceRate &lt; 0.8) return false; // 负载均衡</code></pre> if (!l0CanLoadBatch_ &amp;&amp; balanceRate &lt; 0.8) return false; // 负载均衡</code></pre>
@@ -190,7 +190,7 @@ if (!l0CanLoadBatch_ &amp;&amp; balanceRate &lt; 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>