| fix(bias): 修正 kernel 侧 WithLoop/WithoutLoop 分派条件,解决高维交错广播 MTE 越界 Co-authored-by: SeanDictionary<b24081019@njupt.edu.cn> # message auto-generated for no-merge-commit merge: !7087 merge feat/bias into master fix(bias): 修正 kernel 侧 WithLoop/WithoutLoop 分派条件,解决高维交错广播 MTE 越界 Created-by: SeanDictionary Commit-by: SeanDictionary Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> **根因**:bias_kernel.h 中 CopyInX / CopyInBias 的 WithLoop/WithoutLoop 分派条件误用 shapeLen ≤ NDDMA_MAX_DIMS(只看合轴后总维数),而 lerp / pow / tanh_grad 等同仓算子均使用 shapeLen - ubSplitAxis ≤ NDDMA_MAX_DIMS(看切分轴到末尾的维数)。 当 shapeLen=6 且 ubSplitAxis=2 时(高维交错广播场景,如 8 维输入 + bias 广播维交错): - 原条件:6 > 5 → 强制进入 BroadcastNddmaWithLoop,但切分轴实际位于 NDDMA 最后 5 维以内(6-2=4≤5),该函数在此场景下索引模型错乱(空积循环计数、负索引写、DMA 参数未截断切分轴),单次搬运量超出队列容量约 160 倍,触发 MTE 写 UB 越界(errcode 82),多核任务级崩溃 - 正确条件:6 - 2 = 4 ≤ 5 → 走 BroadcastNddmaWithoutLoop,正确将切分轴截断为 ubSplitSize,安全搬运 **修复**:分派条件从 shapeLen ≤ NDDMA_MAX_DIMS 改为 shapeLen - ubSplitAxis ≤ NDDMA_MAX_DIMS,与 lerp/pow/tanh_grad 等算子保持一致,仅修改 2 行。继续使用 base 公共函数(atvoss/util/broadcast_utils.h),不做本地化封装。 **同仓对照**:lerp / pow / tanh_grad 使用同一 base 广播函数但因分派条件正确而不受此问题影响,实测用同样的 8 维交错广播输入验证均安全(UNSUPPORTED 或正常执行,无设备错误)。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> #4450 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 平台:Ascend950 (950DT_9592),CANN 9.2.0,TTK 三方精度比对(NPU + CPU golden + GPU A100): - 复现用例 Bias_L1_accuracy_perf_d_b_476 及同构探针(修复前 MTE 越界崩溃):修复后 **PASS**(572µs/581µs) - 官方泛化用例 L0(GEIR 三方):**77/77** PASS - 官方 L2 异常注入:14 例全部执行无崩溃(4 正确通过 + 10 正确拒绝) - 精度专项(inf/nan/大 shape/非对齐):**16/16**;DFX(空 tensor/非连续/动态 shape):**15/15**;性能:**21/21**;GEIR:**50/50** - 自有 ST 三方 cross_check:**828/828** PASS - L1 全量(GEIR 三方 689 例):后台运行中(此前抽样 30/30 已通过) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!7087 | 9 天前 |