| fix(math): release resources on init failure in brc aclnn examples Co-authored-by: xjh2527<522024330101@smail.nju.edu.cn> # message auto-generated for no-merge-commit merge: !4633 merge fix/init-resource-leak-brc-ifaces into master fix(math): release resources on init failure in brc aclnn examples Created-by: xjh2527 Commit-by: xjh2527 Merged-by: cann-robot Description: ## 描述 修复 ops-math 仓库中 BRC(二元广播计算)类算子调用示例在初始化失败场景下资源释放不完整的问题。 - aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。 - aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDevice 和 aclFinalize,释放已设置的 Device 及 ACL 资源。 - 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。 - 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。 本次修改参考 ops-nn PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。修复范围严格对应 Issue #2653 中描述的 BRC 算子 ACLNN 接口清单,逐接口匹配对应的 docs/aclnn*.md 文档与 examples/test_aclnn_*.cpp 示例。experimental/ 镜像不在本次范围内。 ## 涉及算子 共 138 个文件(69 个 examples/test_aclnn_*.cpp + 69 个 docs/aclnn*.md),仅覆盖 math/ 和 conversion/ 目录: ### math(120 个文件) - **Add**:aclnnAdd / aclnnAdds / aclnnInplaceAdd / aclnnInplaceAdds - **Sub**:aclnnSub / aclnnSubs / aclnnRsub / aclnnRsubs / aclnnInplaceSub / aclnnInplaceSubs - **Mul / Muls**:aclnnMul / aclnnMuls / aclnnInplaceMul / aclnnInplaceMuls - **Minimum / Maximum**:aclnnMinimum / aclnnMinN / aclnnMaximum / aclnnMaxN - **Signbit**:aclnnSignbit - **Less / LessEqual**:aclnnLtScalar / aclnnLtTensor / aclnnLeScalar / aclnnLeTensor(及 Inplace 变体) - **Greater / GreaterEqual**:aclnnGtScalar / aclnnGtTensor / aclnnGeScalar / aclnnGeTensor(及 Inplace 变体) - **NotEqual / Equal**:aclnnNeScalar / aclnnNeTensor / aclnnLogicalXor / aclnnEqScalar / aclnnEqTensor(及 Inplace 变体) - **Lerp**:aclnnLerp / aclnnLerps / aclnnInplaceLerp / aclnnInplaceLerps - **LogicalAnd / LogicalOr**:aclnnLogicalAnd / aclnnLogicalOr(及 Inplace 变体) - **BitwiseOr / BitwiseAnd / BitwiseXor**:aclnnBitwiseOrScalar / aclnnBitwiseOrTensor / aclnnBitwiseAndScalar / aclnnBitwiseAndTensor / aclnnBitwiseXorScalar / aclnnBitwiseXorTensor(及 Inplace 变体) - **TanhGrad**:aclnnTanhBackward - **Addcmul / Ger / Gcd**:aclnnAddcmul / aclnnGer / aclnnGcd - **SelectV2**:aclnnSWhere - **RealDiv**:aclnnDiv / aclnnDivs / aclnnDivMod / aclnnDivMods(及 Inplace 变体) - **FloorDiv**:aclnnFloorDivide / aclnnFloorDivides(及 Inplace 变体) - **Pow**:aclnnExp2 / aclnnPowTensorScalar / aclnnPowTensorTensor / aclnnPowScalarTensor(及 Inplace 变体) - **Addcdiv**:aclnnAddcdiv / aclnnInplaceAddcdiv - **Mod**:aclnnFmodScalar / aclnnFmodTensor(及 Inplace 变体) - **FloorMod**:aclnnRemainderScalarTensor / aclnnRemainderTensorScalar / aclnnRemainderTensorTensor(及 Inplace 变体) ### conversion(18 个文件) - **ClipByValueV2**:aclnnClamp / aclnnClampMax / aclnnClampMaxTensor / aclnnClampMin / aclnnClampMinTensor / aclnnClampTensor / aclnnHardtanh(及 Inplace 变体) 注:upstream 已用 C++ RAII(StreamPtr / aclGuard)重构的 16 个文件本 PR 跳过,不再重复修改。 ## 关联的Issue Issue #2653:https://gitcode.com/cann/ops-math/issues/2653 ## 测试 - git diff --check:通过。 - pre-commit 全部通过(clang-format / trailing-whitespace / end-of-file-fixer / codespell / markdownlint / OAT 等)。 - CI 流水线全部通过(cann-cla/yes、api-check-pass、ci-pipeline-passed):全平台编译、UT 测试、PreSmoke 均成功。 - 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。 ## 文档更新 - 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。 - 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4633 | 13 天前 |