Closed
[Requirement|需求建议]: ArgMaxWithValue算子aclnn示例改为C++ RAII资源管理 #2644
sundayAdd on  Aug 17Closed at  Aug 17
sundayCollaborators
Aug 17 Create

一、背景信息 (必填)

ArgMaxWithValue算子的aclnn调用示例目前使用手动资源管理方式:裸指针 + main末尾统一释放。当流程中任一 CHECK_RET 提前返回时,会跳过末尾的释放逻辑,存在device内存/tensor/stream泄漏风险。涉及文件:

  • math/arg_max_with_value/examples/test_aclnn_arg_max_with_value.cpp

同仓 IsFinite/IsInf 算子的示例已采用 C++ RAII 管理,风格不一致,维护成本高。

二、价值/作用 (必填)

  • 健壮性:任何提前return路径下,stream/device内存/tensor/workspace 均可通过 RAII 自动回收,消除泄漏隐患;
  • 一致性:与 IsFinite/IsInf 算子示例风格统一,降低后续维护成本。

三、设计方案 (必填)

复用 test_aclnn_is_finite.cpp 的 RAII 方案改造 math/arg_max_with_value/examples/test_aclnn_arg_max_with_value.cpp。

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

Aclnn直调示例。

3.2 总体设计
  • 新增 StreamPtr/DeviceMemPtr/TensorPtr(unique_ptr + 自定义deleter)与 aclGuard(shared_ptr + 析构lambda,按初始化状态条件调用 aclrtResetDevice/aclFinalize);
  • Init/CreateAclTensor 改为接收智能指针引用,CreateAclTensor 补充 aclCreateTensor 判空;
  • 删除 main 末尾的手动释放逻辑。
3.2.1 算子支持的数据类型

不涉及算子逻辑变更,仅为示例代码改造。

3.2.2 host侧设计

如上 3.2 总体设计。

3.2.3 kernel侧设计

不涉及。

3.3 支持硬件

所有已支持硬件(示例代码无新增依赖)。

3.4 算子约束限制

无。

likedislike
CANN-robotCANN-robotCollaborators
Aug 17 Close issue
CANN-robotCANN-robotCollaborators
Aug 17 Added label: resolved
陈思陈思Collaborators
Sep 22 Assign zhou-qilong as responsible person