CANN编码的一些报错汇编
- [acl_init]-841: aclInit failed with 100002.
介绍一下背景,就是CANN体验营里有2个小功能的串接。这样首先在形式上将2个小功能的代码串接起来,编译通过后,运行时报了这个错。
首先查看一下错误码的含义,在 include/acl/acl_base.h
里定义有:
static const int ACL_SUCCESS = 0;
static const int ACL_ERROR_INVALID_PARAM = 100000;
static const int ACL_ERROR_UNINITIALIZE = 100001;
static const int ACL_ERROR_REPEAT_INITIALIZE = 100002;
根据错误码100002,所以错误信息为:ACL_ERROR_REPEAT_INITIALIZE,也就是重复初始化的意思。
确实有做重复初始化,因为2个小功能在开头都做过初始化,虽然在结尾也都做了去初始化,但是去初始化后再初始化也是不行的,有点难理解哦,那来查阅一下 aclInit 的文档:
里面约束说明写的很清楚了:
一个进程内只能调用一次aclInit接口。
而媒体数据处理初始化 hi_mpi_sys_init 倒是可以重复做。
标准形态下,需在申请AscendCL运行管理资源后调用本接口。
一个进程内,可以调用本接口反复初始化,不返回失败。
[acl_destory_resource]-877: destroy context failed with 100000.
[acl_destory_resource]-881: reset device(0) failed with 507007.
[acl_destory_resource]-885: finalize acl failed with 100037.
这几个错误在一起列出来,都是在资源释放时报错的错误码。报错的原因与上面初始化的报错类似,即重复释放导致的。错误码定义分别在2个头文件里,如下。
头文件 include/acl/acl_base.h
:
static const int ACL_ERROR_INVALID_PARAM = 100000; //已释放后再释放content指针已为空,所以说content指针为无效参数
static const int ACL_ERROR_REPEAT_FINALIZE = 100037;
头文件 include/acl/error_codes/rt_error_codes.h
里面:
static const int32_t ACL_ERROR_RT_CONTEXT_RELEASE_ERROR = 507007;
// context release error
总结:
- acl 初始化、去初始化都不可以重复做
- 媒体数据预处理初始化 hi_mpi 可以重复做
- 点赞
- 收藏
- 关注作者
评论(0)