以 example/A2/BLAS/cgemv/example_cgemv.cpp:20 为代表,全部 example 使用如下宏:
#define ASD_STATUS_CHECK(err) \ do { \ AsdSip::AspbStatus err_ = (err); \ if (err_ != AsdSip::ErrorType::ACL_SUCCESS) { \ std::cout << "Execute failed." << std::endl; \ exit(-1); \ } else { \ std::cout << "Execute successfully." << std::endl; \ } \ } while (0)
失败路径直接 exit(-1),不做任何资源清理:
exit(-1)
asdBlasHandle
aclrtStream
aclrtMalloc
aclDestroyTensor
aclFinalize
示例代码是用户集成的主要参考,该模式会被直接复制到用户生产代码中,失败即泄漏。
示例自身的健壮性与示范作用问题,不影响库本体;但会向用户传递不良实践。
失败路径补 asdBlasDestroy / aclrtDestroyStream / aclrtFree / aclFinalize 等清理,或改为错误码逐层返回 + main 统一清理的结构。
asdBlasDestroy
aclrtDestroyStream
aclrtFree
感谢您的反馈,当前@east_yang跟踪处理中。
Describe the current behavior / 问题描述
以 example/A2/BLAS/cgemv/example_cgemv.cpp:20 为代表,全部 example 使用如下宏:
#define ASD_STATUS_CHECK(err) \ do { \ AsdSip::AspbStatus err_ = (err); \ if (err_ != AsdSip::ErrorType::ACL_SUCCESS) { \ std::cout << "Execute failed." << std::endl; \ exit(-1); \ } else { \ std::cout << "Execute successfully." << std::endl; \ } \ } while (0)失败路径直接
exit(-1),不做任何资源清理:asdBlasHandle不销毁(泄漏 plan 及 device 内存)aclrtStream不销毁aclrtMalloc分配的 device 内存不释放aclDestroyTensor/aclFinalize均不执行示例代码是用户集成的主要参考,该模式会被直接复制到用户生产代码中,失败即泄漏。
Impact / 影响
示例自身的健壮性与示范作用问题,不影响库本体;但会向用户传递不良实践。
Suggested fix / 修复建议
失败路径补
asdBlasDestroy/aclrtDestroyStream/aclrtFree/aclFinalize等清理,或改为错误码逐层返回 + main 统一清理的结构。Environment / 环境信息