From ad6a92fdde819705d968deef6c7228f34b1a60f0 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 26 Aug 2026 11:30:26 +0000 Subject: [PATCH] =?UTF-8?q?v1.0:=20=E5=90=8C=E6=AD=A5HTML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MergeBatch_vs_IterBatch分析_v1.0.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BMM算子优化分析_Release/MergeBatch_vs_IterBatch分析_v1.0.html b/BMM算子优化分析_Release/MergeBatch_vs_IterBatch分析_v1.0.html index 02350b0..1e7fb70 100644 --- a/BMM算子优化分析_Release/MergeBatch_vs_IterBatch分析_v1.0.html +++ b/BMM算子优化分析_Release/MergeBatch_vs_IterBatch分析_v1.0.html @@ -41,7 +41,7 @@ MathJax = {

MergeBatch vs IterBatch:BMM 小 tile 场景的两种实现路径分析

-
目标芯片:昇腾 950PR(DAV_3510)。理论分析基于《BMM 算子优化分析 v0.96》,源码参考 [cann-ops-nn](https://gitee.com/ascend/cann-ops-nn) 中 matmul/batch_mat_mul_v3 实现。
+
目标芯片:昇腾 950PR(DAV_3510)。理论分析基于《BMM 算子优化分析 v0.96》,源码参考 [cann-ops-nn](https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3) 实现。

一、问题定义

BMM(BatchMatMul)中,当 B ≥ C(batch 数 ≥ AIC 核数)时,核间切 B 是免费的——每核独立处理若干 batch,无共享无依赖。核内的两种实现路径:

@@ -146,7 +146,7 @@ $$

五、与源码实现的对比

5.1 MergeBatch 源码(batch_matmul_v3_mergebatch_basicapi_tiling.cpp

IsCapable 条件

-
// 源码:https://gitee.com/ascend/cann-ops-nn
+
// 源码: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 (alignK < 64 || M > N) return false;             // K ≥ 64,M ≤ N
 if (L0 buffer check with b0=4) return false;        // L0C 容量
@@ -162,7 +162,7 @@ if (L0 buffer check with b0=4) return false; // L0C 容量

结论:源码的 MergeBatch 进入条件偏宽——缺少搬移量、tile 大小、算存比三条约束。可能导致不应进入的 case 被误捕获(如计算 Bound 的 case 进入 MergeBatch 后冗余计算成为瓶颈)。

5.2 IterBatch 源码(batch_matmul_v3_iterbatch_basicapi_tiling.cpp

IsCapable 条件

-
// 源码:https://gitee.com/ascend/cann-ops-nn
+
// 源码:https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3
 if (batchC <= aicNum) return false;  // B ≤ 32 不进 IterBatch
 if ((alignM*alignK + alignK*alignN)*dtype*2 > L1) return false;  // L1 双缓冲
 if (!l0CanLoadBatch_ && balanceRate < 0.8) return false;  // 负载均衡
@@ -190,7 +190,7 @@ if (!l0CanLoadBatch_ && balanceRate < 0.8) return false; // 负载
  1. [昇腾 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
  2. [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
  3. -
  4. [cann-ops-nn 源码仓](https://gitee.com/ascend/cann-ops-nn),matmul/batch_mat_mul_v3 目录
  5. +
  6. [cann-ops-nn 源码仓](https://gitcode.com/cann/ops-nn/tree/master/matmul/batch_mat_mul_v3)