| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8750 merge foreach into master fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复11个Foreach算子arch35 tiling中dtype未拦截问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5030 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8750 | 1 个月前 | |
fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8750 merge foreach into master fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复11个Foreach算子arch35 tiling中dtype未拦截问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5030 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8750 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
fix(arch35): GroupNormSiluQuant/MultilabelMarginLoss/L2NormalizeGrad算子功能修复 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9017 merge fix/issue-batch-0820 into master fix(arch35): GroupNormSiluQuant/MultilabelMarginLoss/L2NormalizeGrad算子功能修复 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 修复测试问题单 #21 / #31 / #32 暴露的三个算子的内核与 tiling 缺陷,并整改 0820 批次核对出的资料与实现不一致项。 ### 一、GroupNormSiluQuant —— UB 记账越界(issue #21) 现象:geir 动静态双腿 7 例全崩(MTE2 写越界 82 / VEC 访存越界 341 / scalar 越界 263),其中 3 例入参完全合法。四处缺陷: 1. SetPartialFallback 的 ubSize - meanAndRstd - gamma - beta - quantScale **无下溢保护**。实测 C=5408396 时 ubRemain 下溢成 2^64-21380096,processSize 被算成 2^61 级。 2. 同函数用 isLargeChannel && hasOptional 决定走 1120 还是 1100,而 quantScale 是否整段常驻**只取决于 C**:大 C 且无 gamma/beta 时被错选进 1100。判据改为「整段常驻装不装得下」。 3. MaybeSetSplitReduce 覆盖成 1140 时不做 UB 预算校验,而 1140 内核按「本核通道数」常驻 gamma/beta(每通道 12B,且无 gamma/beta 时也照开)。新增 SplitReduceFitsUb(与内核 InitUbBuffers 逐项对应),内核侧改为按 hasGamma/hasBeta 条件分配。 4. host 的 couldFold 漏了 kernel isFold = hwNum <= NDDMA_SIZE || (!hasGamma && !hasBeta) 的后半个条件,导致「无 gamma/beta + 大 hwNum」档 kernel 按 fold 布局写 451KB 而 host 只预留 shapeC 个 fp32。 另加防御:generalized 环两处减法加下溢保护;两处 DownAlign 为 0 时直接返回;tiling 出口统一校验——凡靠 processSize 驱动搬运的 key 解不出正值一律 GRAPH_FAILED,不把 0/下溢值下发给内核。 ### 二、MultilabelMarginLoss —— 支持面窄于 A2(issue #32) 原实现七块 buffer 全部随 C 线性增长且不参与分块,UB 253952B 直接换算出 C≈8000 上限,超过即 tiling 主动 GRAPH_FAILED(实测 C<=2842 全过、C>=195万 全败),而 A2 由 TBE DSL 承担切分对 C 无上限。 - tiling 新增 cFactor:整行装得下时 == C(走原全行路径,行为不变),装不下时解出分块长度(解时先给行方向分块 buffer 留 TILE_MIN 份,否则 ubFactor 会解出 0)。 - kernel 新增 C 分块路径:逐段在 UB 内建掩码并产出 is_target,标签分批缓存(每批至多 cFactor 个,连 x[k] 一并取回),每批对全部 x 段各做一次向量累加。复杂度与全行路径同为 O(P*C)。 - 三处同步缺陷(均由「同一用例跑两遍结果不同」暴露):DeQue 只给 MTE2→V,标量读 target 段需自补 MTE2→S;EnQue 只给 V→MTE3,标量写的缓冲搬出前需自补 S→MTE3;类内固定 EVENT_ID0 的 PipeBarrier 在本路径会与队列/LocalReduceSum 的同 ID 事件互踩,改用独立事件 ID。 ### 三、L2NormalizeGrad —— SPLIT_D 累加槽位写穿(issue #31 的超大 D 档) kernel 的 accum 缓冲固定 SPLIT_D_MAX_CHUNKS(=256) 槽,而 FormerProcess 按 numChunks_ 直接 Duplicate/写槽。1 维 D=1.51e8 需约 3.7 万槽,当场写穿 → errcode 341,host 侧无守卫。改为分组累加(组内向量规约 + 组间标量累加),D 不再有上限。 ### 四、GroupNormSiluQuant —— 空 Tensor 的 meanOut 语义两条通路不一致 资料两处(README.md:73、docs/aclnnGroupNormSiluQuant.md:112)与手写 aclnn 都规定「空 Tensor 时 meanOut 填 0、rstdOut 填 NAN」:op_host/op_api/aclnn_group_norm_silu_quant.cpp:251 的 IsEmpty() 分支显式 FillScalar(meanOut, 0) + FillScalar(rstdOut, NAN) 后直接返回,不下发内核。 而 arch35 内核的 empty 分支调 ProcessMeanAndRstd 时,该函数把填充值写死成 NAN,mean/rstd 都填 NAN——走 GE 图通路(aclnn 不参与)时 meanOut 变成 NaN,违反算子自己的契约。修法:把填充值提成入参,mean 传 0、rstd 传 NAN。 (对照:同族 GroupNormSilu 的 aclnn 对 regbase 显式跳过 FillScalar、把空张量交给内核,两条通路自洽;本算子的 aclnn 是无条件填充,所以只有本算子存在通路间不一致。) ### 五、GroupNormSiluQuant golden 补两档 + 判据显式声明 新配额用例集暴露:可选输入缺省(gamma/beta 传 None)与空张量在 golden 里判不了(15 例 GOLDEN_FAILURE),而「可选输入不给」正是 issue #21 中 L1_014 的画像——该档此前从设计上就没被验证过。按内核语义补缺省(1.0/0.0),空张量短路按上述契约取 mean=0 / rstd=NaN。 并把每个输出的判据显式声明到 Spec.tolerance,不再依赖 CLI 传什么: - int8 输出声明 quant —— 否则 TTK 把 int8 硬路由到 binary_equal,量化舍入的 ±1 LSB 被大面积误判(26 例「失败」实测最大 |diff| 全为 1)。 - mean/rstd 三种浮点 dtype 声明 CANN 开源标准 stat_rel_err(mere < th 且 mare < 10*th)。此前未声明,落到 TTK 默认的 isclose(atol=1e-8),该地板低于 bf16/fp32 在常见量级上的分辨率。实测 case00603_rg(2,5120,7) bf16:2560 个 mean 元素里 10 个不相等,**每个恰好差 1 ULP**(--dump 取原始数组算得 ULP 倍数 max=1.0000,超 1 ULP 的 0 个)——内核 fp32 累加后舍入到 bf16 与 torch 求和次序不同,边界值差一格,任何实现都做不到更好。 ### 六、0820 批次资料与实现一致性(issue #36~#49) 判据:aclnn 是手写还是自动生成(前者看 l0op::Contiguous/ViewCopy 的实际调用,后者看 OpDef 的 AutoContiguous,依据 cmake/func.cmake:502 有无 op_api/*.cpp 分流);再看参数是输入、ref(输入/输出复用)还是纯输出——自动生成路径下只有输入与 ref 有非连续支持,纯输出没有这一说。 - 6 个 foreach inplace 的第一参数(ref,输入侧已声明 AutoContiguous):资料 × → √(#38/#39/#44/#45/#46/#47) - ForeachAddcdivList / ForeachAddcmulList:def + arch35 内核 + config/ascend950 三层齐备,资料「A5 不支持」→ 支持(#40/#42) - DeepNorm / DeepNormGrad 的 7 个纯输出:资料 √ → ×(#36/#37) - FusedCrossEntropyLossWithMaxSum:inputOptional/weightOptional 的「非连续Tensor」列 √ → -(不涉及)(#48)。这两个参数当前只支持空指针(资料使用说明已写明),且实现中完全未被使用:aclnn 的 CheckParams 将其标为 [[maybe_unused]],kernel 的 GM_ADDR gmTensor[6] 张量列表也不含它们。既然不可能传入张量,「支持非连续」对其为空谈,正确整改是把该列标为不涉及,而不是给一个永不使用的入参补 l0op::Contiguous。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4994 ## 测试 全部为 Ascend950PR 真机实测(TTK geir 通路 + op_host UT)。 **issue 原始用例** | 项 | 结果 | |---|---| | #21 原始 7 例 | **7/7 PASS**(修复前 7/7 崩) | | #31 超大 D(1.51 亿元素)2 例 | 由 errcode 341 转 **PASS** | | #32 C 轴切分专项 57 例(旧全行路径 33 + 新 C 分块路径 24) | **57/57 PASS** | **回归与泛化** | 算子 | 交付回归集 | 配额集(七条硬约束派生) | 改动路径专项 | |---|---|---|---| | MultilabelMarginLoss | **1098/1098** | **113/113** | 57/57 | | L2NormalizeGrad | **1018/1018** | 79/81 | fp32 精度 13/13 | | GroupNormSiluQuant | 前 158 例 **158/158** | **211/211** | 空张量 **44/44**、改动路径集 **779/779** | 说明: - L2G 配额集余 2 例是 TTK 建图侧问题(rank==1 且属性 dim 缺省时,生成的图把输入 dtype 写错一档),算子对 DT_DOUBLE 正确拒收,该用例未测到算子;同一档由 fp16 那例以正确的 EZ0026 拒收覆盖。 - GNSQ 改动路径集按「本次改动真正生效的条件」筛选(大 C 路由/下溢保护区 + 空张量),未改动路径不重复验证。过程中 6 例 PROFILE_CRASH 退出码为 -9(宿主 OOM,容器 32G 上限),降并发单进程复跑 **6/6 PASS**。 - L2G fp32 13 例按算子自己声明的 cross_check L1 三方比对复判全 PASS:mare 比值 1.0~1.11(阈值 5.0)、mere 0.0036(阈值 1.5),NPU 误差与 GPU 竞品同量级。 ## 文档更新 10 个资料文件的一致性订正(详见「六、0820 批次资料与实现一致性」): - foreach/*/docs/aclnnForeach{ACos,AddList,MulList,MulScalar,SubList,SubScalar}Inplace.md - foreach/*/docs/aclnnForeach{Addcdiv,Addcmul}List.md - norm/deep_norm/docs/aclnnDeepNorm.md、norm/deep_norm_grad/docs/aclnnDeepNormGrad.md - loss/fused_cross_entropy_loss_with_max_sum/docs/aclnnFusedCrossEntropyLossWithMaxSum.md ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9017 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8750 merge foreach into master fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复11个Foreach算子arch35 tiling中dtype未拦截问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5030 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8750 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8750 merge foreach into master fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复11个Foreach算子arch35 tiling中dtype未拦截问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5030 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8750 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
kernel ut 增加防卡死超时,快速模式,覆盖率控制 Co-authored-by: chenqi317<chenqi317@huawei.com> # message auto-generated for no-merge-commit merge: !8187 merge master into master kernel ut 增加防卡死超时,快速模式,覆盖率控制 Created-by: chenqi317 Commit-by: chenqi317 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 提交总结:kernel ut 增加防卡死超时、快速模式、覆盖率控制 **修改背景**:Kernel UT 存在单测卡死导致整套测试挂起、运行慢(addr2line 符号化耗时)、gcov 覆盖率始终链接带来不必要开销等问题。 **修改方案**: 1. **防卡死超时**:新增 run_kernel_ut.sh,按 case 逐个执行并用 timeout 限时(默认 120s,--ut_timeout 可配),超时即标记失败并继续,避免单点卡死阻塞全流程。 2. **快速模式**:新增 --ut_mode=fast/debug。fast 模式关闭符号化(注入 fake addr2line 跳过慢解析)、改用 -g0 -O2,用于快速验证;debug 模式保留 -g 与符号化,用于开发调试。 3. **覆盖率控制**:将 ut.cmake 中 gcov 的无条件链接改为 $<$<BOOL:${ENABLE_COVERAGE}>:gcov> 条件链接,仅在开启覆盖率时引入; 4. **修复失败的kernel ut**:TensorFlow 依赖替换为md_dtypes, 修复部分block 越界,缺少SetKernelMode 设置导致核获取错误等问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4606 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 通过kernel ut 测试,bash build.sh -u --opkernel --ut_mode=fast --ut_timeout=60 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8187 | 2 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !8750 merge foreach into master fix(foreach): 修复11个SIMT算子arch35 tiling中dtype未拦截问题 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复11个Foreach算子arch35 tiling中dtype未拦截问题 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5030 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8750 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach_minimum_scalar_list):功能问题修复,重构 arch35 SIMT 实现,按 tensor 下发 VF_CALL 并改用结构体 tiling 数据 Co-authored-by: ZhouChuping<24171214023@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !9462 merge foreach_minimum_scalar_list into master fix(foreach_minimum_scalar_list):功能问题修复,重构 arch35 SIMT 实现,按 tensor 下发 VF_CALL 并改用结构体 tiling 数据 Created-by: qq_52056150 Commit-by: ZhouChuping Merged-by: cann-robot Description: ## 描述 修复 TensorList 多 Tensor 计算及 scalar 映射问题;重构 arch35 SIMT 实现,按 Tensor 获取地址、元素数和 scalar 并分别下发 VF_CALL;改用结构体 Tiling 数据传递 tensorCount/tensorElements;补齐 FP16/BF16/INT32 计算类型提升、NaN 传播及空 Tensor 处理。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5386 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 本地复跑问题case后精度pass,批跑白盒300条用例无功能问题,线上David冒烟和OBP冒烟均无异常。 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 不涉及 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9462 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
fix(foreach_neg/dequant_swiglu_quant): 修复数组越界与动态量化除零缺陷 (#5019 #5020 #5011 #5012) Co-authored-by: east_yang<yangdong48@huawei.com> # message auto-generated for no-merge-commit merge: !9481 merge fix/issue-5019-5020-5011-5012 into master fix(foreach_neg/dequant_swiglu_quant): 修复数组越界与动态量化除零缺陷 (#5019 #5020 #5011 #5012) Created-by: east_yang Commit-by: east_yang Merged-by: cann-robot Description: ## 修复内容 本PR修复缺陷分析报告中的4个确认成立的缺陷: ### 1. foreach_neg host侧数组越界写 (#5019) foreach_neg_tiling.cpp 中 tensorNum 来自外部输入无上限校验, >256 时越界写 ForeachNegTilingData::tensorElements[256]。新增 MAX_TENSOR_NUM_FOREACH_NEG = 256 上限校验(对齐同仓 foreach_add_list 等算子写法)。 ### 2. foreach_neg kernel侧数组越界读 (#5020) foreach_neg_simt.h 中 tensorCount 未校验即作为循环上界读 GM。host侧修复后理论上不可达, 作为纵深防御在 kernel 侧 clamp 到 256。 ### 3. DequantSwigluQuant 动态量化除零 (#5011, #5012) 动态量化路径 DynamicCompute/BaseCompute2 中 scale = 1/value, 当某行 SwiGLU 输出全零(如 INT32量化输入为0、silu大负值饱和、padding token零填充行、MoE空路由行)时 value=0 → scale=inf → Muls 产生 0*inf=NaN, 量化输出被静默污染。增加零值防护: scale = (value == 0.0f) ? 1.0f : (1.0f / value)。 ## 验证 - ophost UT: 77/77 PASSED - ascend950 全量编译(ophost库+kernel binary): 0 error - host修复编入验证: .o 中含校验日志字符串 - kernel修复编入验证: md5对比实验确认clamp已编入 - pre-commit(OAT/clang-format/codespell等): 全部通过 Closes #5019 Closes #5020 Closes #5011 Closes #5012 See merge request: cann/ops-nn!9481 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
MicroAPI namespace to Reg for arch35 kernels Co-authored-by: gcw_DS4cmz2b<1312925094@qq.com> # message auto-generated for no-merge-commit merge: !9267 merge rename into master MicroAPI namespace to Reg for arch35 kernels Created-by: gcw_DS4cmz2b Commit-by: gcw_DS4cmz2b Merged-by: cann-robot Description: ## 描述 修改了index,activation,matmul,conv,foreach,optim,experimental,vfusion,hash这几个文件夹内的命名空间,将MicroAPI-->Reg ## 关联的Issue [多个文件夹内的算子命名空间使用的MicroAPI,应改为Reg](https://gitcode.com/cann/ops-nn/issues/5218) ## 测试 验证方法 严格按四步流程,逐算子验证: 1. Step 1:编译原始代码,保存 baseline binary .o 文件 MD5 2. Step 2:执行 MicroAPI → Reg 替换 3. Step 3:编译替换后代码,保存 after binary .o 文件 MD5 4. Step 4:对比 A_before.md5 与 B_after.md5 平台:ascend950,编译参数:--soc=ascend950 --ops=<op> -j16 验证替换前后 binary 产物 MD5 完全一致。 冒烟,代码审查均通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9267 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
fix: 为foreach手写aclnn算子补充tensor list空元素检查 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !9494 merge fix/foreach-null-entry into master fix: 为foreach手写aclnn算子补充tensor list空元素检查 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 在CheckParams中CheckNotNull之后、CheckDtypeValid之前,遍历各个tensor list检查元素是否为nullptr,命中则返回ACLNN_ERR_PARAM_INVALID。 共涉及17个foreach算子,20个文件: - aclnn_exclude(10算子/13文件) - aclnn V2 hand-write(7算子/7文件) ## 关联的Issue - Refs #5329 ## 测试 - UT op_api: 62/62 PASSED - UT op_kernel: 72/72 PASSED - UT op_host tiling: 全部通过 - Example eager: 16/17通过(foreach_mul_list为基线已有问题) - ST (ATK): foreach_lerp_scalar 201/201通过,其余16算子各3/3通过 - Pre-commit: 全部通过 ## 文档更新 不涉及 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9494 | 1 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
foreach log fix Co-authored-by: alfengyuan<yyfgdut@gmail.com> # message auto-generated for no-merge-commit merge: !7763 merge 20260722 into master foreach log fix Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 本次 PR 对 ops-nn/foreach 目录进行日志质量整改与 License 合规修复。 **背景**:CANN 日志质量测评(2026-08-25)发现 foreach 目录存在 **580 项**日志质量问题(严重 30 / 一般 5 / 提示 545)。本次 PR 先整改生产代码与示例代码;**tests 目录内的测试相关改动本次暂不涉及**。 **改动内容**: 1. **生产代码日志整改(54 处,仅日志文案不影响功能)** - 20 处 arch35 tiling tensorNum 越限报错补打实际值 - 2 处判空条件修复:platformInfoPtr == nullptr → compileInfoPtr == nullptr(原条件重复判 platformInfoPtr,compileInfoPtr 未判空即解引用,存在空指针隐患) - 7 处语法错误(%s 改 %u、.Currently 补空格、ConcatString 漏空格、shape dim 补主语) - 2 处拼写改名(Tenor → Tensor) - 22 处中文顿号改英文逗号 2. **示例代码(test_geir)清理(3 个文件)** - 15 处 printf 删除(含 3 处「Run graph failed 却用 INFO」级别错配) - 补标准 CANN-2.0 License 头(年份 2026) > **说明**:tests 目录内的测试相关改动本次暂不涉及,测试文件保持与上游一致。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5181 ## 测试 - 生产代码 54 处问题逐条映射核对:全部解决 - pre-commit 门禁全过:trailing-whitespace / end-of-file-fixer / clang-format / ruff / codespell / OAT(52 文件合规检查) 功能全量回归冒烟PASS ## 文档更新 无(不涉及文档修改) ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述:License 合规修复与示例打印清理 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7763 | 1 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Co-authored-by: zhaozhoujun520<zhaozhoujun@huawei.com> # message auto-generated for no-merge-commit merge: !7858 merge master into master modified md files (The product filtering tag is added to the aclnn*.md files of the forech and norm classes) Created-by: gitee-duhuiping Commit-by: zhaozhoujun520 Merged-by: cann-robot Description: ## 描述 The product filtering tag is added to the aclnn*.md files of the forech and norm classes. ## 关联的Issue [#4263](https://gitcode.com/cann/ops-nn/issues/4263) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 aclnn*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7858 | 2 个月前 | |
fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !9498 merge fix/foreach-inplace-ref-output into master fix(foreach): 8 个 inplace 算子补 ref 输出,使非连续就地参数真正回写 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 **问题**: ForeachACosInplace / ForeachAddListInplace / ForeachDivListInplace / ForeachLogInplace / ForeachMulListInplace / ForeachMulScalarInplace / ForeachSubListInplace / ForeachSubScalarInplace 这 8 个 inplace 算子,在就地参数传入**非连续 Tensor**(即 stride 与 shape 不匹配的视图)时,计算结果被**静默丢弃**:aclnn 接口返回 0、不报错、不崩溃,但用户原始 storage 纹丝不动。 **根因**:这 8 个算子的 OpDef 只声明了 Input、没有声明 Output(原注释即写明 x serves as both input and output (no Output declared))。opbuild 因此拿不到输出 IR 索引,建不起 input↔output 的 ref 配对,生成的 aclnn 代码里 NnopbaseSetRef、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy **全部只有 extern 声明、零调用**;而输入连续化(NnopbaseGetUnContiguousTensors + aclnnContiguous)照常生成。于是非连续就地参数被抠进临时连续缓冲 → 内核往临时缓冲就地写 → 无人搬回用户 storage → 结果丢弃。连续场景不产生临时缓冲、内核直接写用户 GM,所以毫无症状,该问题从算子首版潜伏至今。 **改动方法**:参照本仓 index/scatter_max(Input("var") + Output("var") 同名 ref 配对)的既有先例,每个算子改 6 处: 1. op_host/*_def.cpp:补 this->Output("<就地参数>"),与对应 Input 同名、同 dtype/format,置于所有 Input 之后; 2. op_graph/*_proto.h:补 DYNAMIC_OUTPUT,与 DYNAMIC_INPUT 同名;由于原型有变更,REG_OP 外层同时补 OPS_PROTO_DEF_<OPTYPE> 条件编译隔离宏,避免与 canndev 同名注册源重复定义(范式照本仓 activation/relu6_d,与 6da5366fb 给 30 个算子补隔离宏的整改保持一致); 3. op_kernel/arch35/*.cpp:内核入口在所有输入之后补一个输出 GM 槽,op.Init 的输出位实参由「重复传入的就地输入」改为真正的输出地址(基类 Init 本就收独立的 inputs/outputs 两个地址,此前是把输入传了两遍); 4. op_host/config/ascend950/*_binary.json:outputs 由空补成镜像第 0 个输入(index 归 0); 5. docs/aclnn*.md + README.md:与新的 IR 形态对齐(详见「文档更新」); 6. tests/ut/op_host/*_infershape.cpp:补输出 shape / dtype 推导断言。 **共享文件的处理**:foreach_utils/op_host/foreach_infershape.cpp 中**新增** InferShape4ForeachInplaceRef / InferDataType4ForeachInplaceRef 供本次这 8 个算子注册,原 InferShape4ForeachInplace / InferDataType4ForeachInplace **保持空实现一字未动**,未声明输出的 ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 继续指向原函数,行为零影响。foreach_regbase_tiling.cpp 仅同步订正一处注释(原文断言 inplace 算子一律无输出,已不成立)。 **改动范围说明**:同类问题共影响 10 个 foreach inplace 算子,本 PR 只修其中 8 个。ForeachZeroInplace 与 ForeachNonFiniteCheckAndUnscale 同时注册了 Atlas A2/A3 训练系列、Atlas 200I/500 A2 推理系列与 Kirin,且这两者在 A2 侧已有 aclnn 接口,给它们加 Output 等于变更跨代 IR 原型,影响面超出本 PR,不在本次范围内。 ## 关联的Issue 关联Issue #5335 —— https://gitcode.com/cann/ops-nn/issues/5335 ## 测试 **1. 编译与生成物核对** - bash build.sh --ops=<8 个算子> --soc=ascend950:8 个算子全部编译通过,无 E80003; - 生成的 aclnn 签名由 const aclTensorList *x 变为 aclTensorList *xRef;NnopbaseSetRef(*executor, 0, 0)、NnopbaseGetRefUnContiguousTensors、NnopbaseSetViewCopyExecutor、aclnnViewCopy 由「仅 extern 声明」变为真实调用; - 8 篇 aclnn 资料中的函数原型与生成头文件逐字比对一致。 - scripts/util/merge_proto.py 验证:8 个隔离宏与 8 个 DYNAMIC_OUTPUT 均正确带入合并产物。(注:vendor 包内 op_proto/inc/*_proto.h 由 opbuild 从 OpDef 自动生成并覆盖手写版,隔离宏作用于源码树合入 ops_proto_nn.h 的路径。) **2. Host UT** bash build.sh -u --ophost --ops=<8 个算子> --soc=ascend950:**19/19 通过**,并为 8 个 infershape UT 补充了输出 shape 推导断言。 **3. Ascend950PR 真机功能实测(哨兵法)** 用例矩阵 = 8 算子 × 各自 dtype 支持面 × 4 种非连续场景,共 **67 例**: | 场景 | 内容 | | --- | --- | | S1 | 就地参数非连续,每个 TensorList 放 3 个长度不同的 Tensor | | S2 | 仅纯输入 x2 非连续(就地参数连续) | | S3 | 就地参数与 x2 同时非连续 | | S4 | rank2 非连续视图 shape[2,3] / strides[8,2] | dtype 覆盖 FLOAT32 / FLOAT16 / BFLOAT16 / INT32(按各算子资料声明的支持面取)。判据两条同时成立才算通过:①视图覆盖到的位置等于期望值(回写真的发生);②视图未覆盖的 storage 位置哨兵值原封不动(说明是按 stride 散射写,没有连续覆盖踩坏相邻数据);list 类算子额外校验纯输入 x2 一字未改。 **结果:67/67 通过**;就地参数为空 Tensor 的场景另测 **8/8 通过**(资料中「支持空Tensor」描述无回归)。 **4. aclnn 通路错误码复核** 签名由 const aclTensorList *x 变为 aclTensorList *xRef 后,实测资料返回码表仍成立:就地参数传空指针 **8/8 返回 161001**;就地参数中含 9 维 Tensor **8/8 返回 561002**。 **5. 反向对照(证明用例具备鉴别力)** 用**同一个探针二进制**、只替换 vendor 包,在本 PR 修改前的基线代码出包上重跑同样 67 例:**仅 15 例通过、52 例失败**,且通过的 15 例恰好是全部「仅 x2 非连续」用例(本就正常的纯输入连续化路径),凡就地参数非连续的用例全部失败,失败签名一律为「实得 == 原始输入值」,与问题定性完全吻合。这说明 67/67 不是「怎么跑都过」的假通过。 ## 文档更新 - **8 篇 docs/aclnn*.md**:函数原型与参数名同步为生成后的 xRef / x1Ref,返回码表、约束段、dtype 对应关系描述内的参数引用全文统一(与本仓 aclnnScatterMax.md 的 varRef 写法一致;「对应公式中的 x」指公式符号,保留不改)。就地参数的「非连续Tensor」列 div_list 与 log 由 × 改为 √(其余 6 篇原本即为 √)。 - **8 篇 README.md**:参数说明按同名 ref 配对的写法,将就地参数由「输入/输出」单行拆为「输入」+「输出」两行,与新增 IR Output 后的形态对齐(同 index/scatter_max/README.md 中 var 的写法)。 - 产品支持表未改动:该表描述的是算子支持面,与本次 IR 形态调整无关。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9498 | 1 个月前 | |
fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8767 merge fix/scatter-noncontig-and-lamb-infershape into master fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 长尾算子问题优化:scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4865 ## 测试 不涉及 ## 文档更新 README ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8767 | 1 个月前 | |
License Change Split2 Co-authored-by: huohuo_wy<wangyan389@huawei.com> # message auto-generated for no-merge-commit merge: !372 merge spilitLicense3 into master License Change Split2 Created-by: huohuo_wangyan Commit-by: huohuo_wy Merged-by: cann-robot Description: ## 描述 批量整改文件copyright注释 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/177 ## 测试 COPYRIGHT注释头按新要求刷新 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!372 | 9 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 9 个月前 |