已合并
update error msg process #982
胡碧霞创建于 1月24日
update error msg process #982
已合并
胡碧霞创建于 1月24日
5 个文件变更+74-22
@@ -1,6 +1,7 @@
1 # aclnn返回码1 # aclnn返回码
2 2 
3调用aclnn API时,常见的接口返回码如[表1](#zh-cn_topic_0000001563019104_table8155243135018)所示。3调用aclnn API时,常见的接口返回码如[表1](#zh-cn_topic_0000001563019104_table8155243135018)所示。
4+对于异常状态码值,可以通过aclGetRecentErrMsg接口(参见[《acl API(C)》](https://hiascend.com/document/redirect/CannCommunityCppApi))获取异常信息,您可以根据报错提示排查问题或者联系技术支持。
4 5 
5**表 1** 返回状态码6**表 1** 返回状态码
6 7 
@@ -32,7 +33,6 @@
32<td class="cellrowborder" valign="top" width="15.971597159715973%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001563019104_p915619437501"><a name="zh-cn_topic_0000001563019104_p915619437501"></a><a name="zh-cn_topic_0000001563019104_p915619437501"></a>161002</p>33<td class="cellrowborder" valign="top" width="15.971597159715973%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001563019104_p915619437501"><a name="zh-cn_topic_0000001563019104_p915619437501"></a><a name="zh-cn_topic_0000001563019104_p915619437501"></a>161002</p>
33</td>34</td>
34<td class="cellrowborder" valign="top" width="53.48534853485349%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001563019104_p17570123425314"><a name="zh-cn_topic_0000001563019104_p17570123425314"></a><a name="zh-cn_topic_0000001563019104_p17570123425314"></a>参数校验错误,如输入的两个数据类型不满足输入类型推导关系。</p>35<td class="cellrowborder" valign="top" width="53.48534853485349%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001563019104_p17570123425314"><a name="zh-cn_topic_0000001563019104_p17570123425314"></a><a name="zh-cn_topic_0000001563019104_p17570123425314"></a>参数校验错误,如输入的两个数据类型不满足输入类型推导关系。</p>
35-<p id="zh-cn_topic_0000001563019104_p215619437502"><a name="zh-cn_topic_0000001563019104_p215619437502"></a><a name="zh-cn_topic_0000001563019104_p215619437502"></a>详细的错误消息,可以通过aclGetRecentErrMsg接口获取。</p>
36</td>36</td>
37</tr>37</tr>
38<tr id="zh-cn_topic_0000001563019104_row1215674375018"><td class="cellrowborder" valign="top" width="30.543054305430545%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001563019104_p11156174305019"><a name="zh-cn_topic_0000001563019104_p11156174305019"></a><a name="zh-cn_topic_0000001563019104_p11156174305019"></a>ACLNN_ERR_RUNTIME_ERROR</p>38<tr id="zh-cn_topic_0000001563019104_row1215674375018"><td class="cellrowborder" valign="top" width="30.543054305430545%" headers="mcps1.2.4.1.1 "><p id="zh-cn_topic_0000001563019104_p11156174305019"><a name="zh-cn_topic_0000001563019104_p11156174305019"></a><a name="zh-cn_topic_0000001563019104_p11156174305019"></a>ACLNN_ERR_RUNTIME_ERROR</p>
@@ -46,7 +46,7 @@
46</td>46</td>
47<td class="cellrowborder" valign="top" width="15.971597159715973%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001563019104_p14156144313508"><a name="zh-cn_topic_0000001563019104_p14156144313508"></a><a name="zh-cn_topic_0000001563019104_p14156144313508"></a>561xxx</p>47<td class="cellrowborder" valign="top" width="15.971597159715973%" headers="mcps1.2.4.1.2 "><p id="zh-cn_topic_0000001563019104_p14156144313508"><a name="zh-cn_topic_0000001563019104_p14156144313508"></a><a name="zh-cn_topic_0000001563019104_p14156144313508"></a>561xxx</p>
48</td>48</td>
49-<td class="cellrowborder" valign="top" width="53.48534853485349%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001563019104_p10850181263218"><a name="zh-cn_topic_0000001563019104_p10850181263218"></a><a name="zh-cn_topic_0000001563019104_p10850181263218"></a>API内部发生内部异常,详细的错误信息,可以通过aclGetRecentErrMsg接口获取您可以根据报错提示排查问题或者联系技术支持。</p>49+<td class="cellrowborder" valign="top" width="53.48534853485349%" headers="mcps1.2.4.1.3 "><p id="zh-cn_topic_0000001563019104_p10850181263218"><a name="zh-cn_topic_0000001563019104_p10850181263218"></a><a name="zh-cn_topic_0000001563019104_p10850181263218"></a>API内部发生内部异常。</p>
50 50 
51</td>51</td>
52</tr>52</tr>
@@ -118,3 +118,15 @@
118 result[6] is: 9.600000118 result[6] is: 9.600000
119 result[7] is: 10.600000119 result[7] is: 10.600000
120 ```120 ```
121+ 若执行结果报错,未出现预期结果,可以使用aclGetRecentErrMsg接口获取报错具体信息。
122+ 调用aclnnAddmmGetWorkspaceSize报错获取异常信息示例如下:
123+ ```
C
Cchenjiao1月26日

请指明语言类型cpp

likedislike
胡碧霞
1月26日 评论:
124+ // self is nullptr
125+ ret = aclnnAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, out, cubeMathType, &workspaceSize, &executor);
126+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmmGetWorkspaceSize failed. ERROR: %d\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
127+ ```
128+ 上述构造空指针问题获取报错信息示例如下:
129+ ```
130+ aclnnAddmmGetWorkspaceSize failed. ERROR: 161001
131+ [ERROR msg][PID:xxxx] xxx(timesamp) AclNN_Parameter_Error(EZ1001): Expected a proper Tensor but got null for argument addmmTennsor.self.
132+ ```
@@ -6,6 +6,40 @@
6 6 
7算子运行过程中,如果出现算子执行失败、精度异常等问题,可以打印各阶段信息,如Kernel中间结果,进行问题分析和定位。7算子运行过程中,如果出现算子执行失败、精度异常等问题,可以打印各阶段信息,如Kernel中间结果,进行问题分析和定位。
8 8 
9+### 1、Host侧日志获取方式
10+ 
11+* **plog获取**
12+ 
13+ 程序执行结束后,默认可在"$HOME/ascendc/log"下查看,host日志文件存储路径如下:
14+ 
15+ ```
16+ $HOME/ascend/log/debug/plog/plog-pid_*.log
17+ ```
18+ 
19+ 开启环境变量ASCEND_SLOG_PRINT_TO_STDOUT可以将log日志直接打屏显示(1:开启打屏,0:关闭打屏),配置示例如下:
20+ 
21+ ```
22+ export ASCEND_SLOG_PRINT_TO_STDOUT=1
W

建议补充下怎么关闭,以及不同的日志级别

likedislike
胡碧霞
1月26日 评论:
23+ ```
24+ 
25+ 日志相关介绍参见[《日志参考》](https://hiascend.com/document/redirect/CannCommunitylogref),环境变量介绍参见[《环境变量参考》](https://hiascend.com/document/redirect/CannCommunityEnvRef)。
26+ 
27+* **aclnn异常错误信息获取**
28+
29+ 通过aclGetRecentErrMsg接口(参见[《acl API(C)》](https://hiascend.com/document/redirect/CannCommunityCppApi))获取aclnn接口调用过程中的异常信息,使用方法如下:
30+ 
31+ ```
32+ printf(aclGetRecentErrMsg());
33+ ```
34+ 
35+ 打印错误信息样例如下:
36+ 
37+ ```
38+ [PID:646612] 2026-01-24-11:53:44.671.727 AclNN_Parameter_Error(EZ1001): Expected a proper Tensor but got null for argument addmmTennsor.self.
39+ ```
40+ 
41+### 2、Kernel调试
42+ 
9常见调试方法如下:43常见调试方法如下:
10 44 
11* **printf**45* **printf**
@@ -36,6 +70,12 @@
36 70 
37算子运行过程中,如果出现算子执行失败、精度异常等问题,可以打印各阶段信息,如Kernel中间结果,进行问题分析和定位。71算子运行过程中,如果出现算子执行失败、精度异常等问题,可以打印各阶段信息,如Kernel中间结果,进行问题分析和定位。
38 72 
73+### 1、Host侧日志获取方式
74+ 
75+ 见AI Core算子[Host侧日志获取方式](#1host侧日志获取方式)
76+ 
77+### 2、Kernel调试
78+ 
39常见调试方法如下:79常见调试方法如下:
40 80 
41* **KERNEL\_LOG宏**81* **KERNEL\_LOG宏**
@@ -602,27 +602,27 @@ int main() {
602 602 
603 // 调用aclnnAddmm第一段接口603 // 调用aclnnAddmm第一段接口
604 ret = aclnnAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, out, cubeMathType, &workspaceSize, &executor);604 ret = aclnnAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, out, cubeMathType, &workspaceSize, &executor);
605- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmmGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);605+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmmGetWorkspaceSize failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
606 // 根据第一段接口计算出的workspaceSize申请device内存606 // 根据第一段接口计算出的workspaceSize申请device内存
607 void* workspaceAddr = nullptr;607 void* workspaceAddr = nullptr;
608 if (workspaceSize > 0) {608 if (workspaceSize > 0) {
609 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);609 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);
610- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret);610+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
611 }611 }
612 // 调用aclnnAddmm第二段接口612 // 调用aclnnAddmm第二段接口
613 ret = aclnnAddmm(workspaceAddr, workspaceSize, executor, stream);613 ret = aclnnAddmm(workspaceAddr, workspaceSize, executor, stream);
614- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmm failed. ERROR: %d\n", ret); return ret);614+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmm failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
615 615 
616 // 4. (固定写法)同步等待任务执行结束616 // 4. (固定写法)同步等待任务执行结束
617 ret = aclrtSynchronizeStream(stream);617 ret = aclrtSynchronizeStream(stream);
618- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);618+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
619 619 
620 // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改620 // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改
621 auto size = GetShapeSize(outShape);621 auto size = GetShapeSize(outShape);
622 std::vector<float> resultData(size, 0);622 std::vector<float> resultData(size, 0);
623 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,623 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,
624 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);624 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);
625- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret);625+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
626 for (int64_t i = 0; i < size; i++) {626 for (int64_t i = 0; i < size; i++) {
627 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);627 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);
628 }628 }
@@ -632,24 +632,24 @@ int main() {
632 LOG_PRINT("\ntest aclnnInplaceAddmm\n");632 LOG_PRINT("\ntest aclnnInplaceAddmm\n");
633 // 调用aclnnInplaceAddmm第一段接口633 // 调用aclnnInplaceAddmm第一段接口
634 ret = aclnnInplaceAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, cubeMathType, &workspaceSize, &executor);634 ret = aclnnInplaceAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, cubeMathType, &workspaceSize, &executor);
635- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmmGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);635+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmmGetWorkspaceSize failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
636 // 根据第一段接口计算出的workspaceSize申请device内存636 // 根据第一段接口计算出的workspaceSize申请device内存
637 if (workspaceSize > 0) {637 if (workspaceSize > 0) {
638 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);638 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);
639- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret);639+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
640 }640 }
641 // 调用aclnnInplaceAddmm第二段接口641 // 调用aclnnInplaceAddmm第二段接口
642 ret = aclnnInplaceAddmm(workspaceAddr, workspaceSize, executor, stream);642 ret = aclnnInplaceAddmm(workspaceAddr, workspaceSize, executor, stream);
643- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmm failed. ERROR: %d\n", ret); return ret);643+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmm failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
644 644 
645 // step4(固定写法)同步等待任务执行结束645 // step4(固定写法)同步等待任务执行结束
646 ret = aclrtSynchronizeStream(stream);646 ret = aclrtSynchronizeStream(stream);
647- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);647+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
648 648 
649 // step5 获取输出的值,将device侧内存上的结果拷贝至host侧649 // step5 获取输出的值,将device侧内存上的结果拷贝至host侧
650 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), selfDeviceAddr,650 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), selfDeviceAddr,
651 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);651 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);
652- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret);652+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
653 for (int64_t i = 0; i < size; i++) {653 for (int64_t i = 0; i < size; i++) {
654 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);654 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);
655 }655 }
@@ -132,28 +132,28 @@ int main() {
132 132 
133 // 调用aclnnAddmm第一段接口133 // 调用aclnnAddmm第一段接口
134 ret = aclnnAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, out, cubeMathType, &workspaceSize, &executor);134 ret = aclnnAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, out, cubeMathType, &workspaceSize, &executor);
135- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmmGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);135+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmmGetWorkspaceSize failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
136 // 根据第一段接口计算出的workspaceSize申请device内存136 // 根据第一段接口计算出的workspaceSize申请device内存
137 void* workspaceAddr = nullptr;137 void* workspaceAddr = nullptr;
138 if (workspaceSize > 0) {138 if (workspaceSize > 0) {
139 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);139 ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);
140- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret);140+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
141 executorAddrPtr.reset(workspaceAddr);141 executorAddrPtr.reset(workspaceAddr);
142 }142 }
143 // 调用aclnnAddmm第二段接口143 // 调用aclnnAddmm第二段接口
144 ret = aclnnAddmm(workspaceAddr, workspaceSize, executor, stream);144 ret = aclnnAddmm(workspaceAddr, workspaceSize, executor, stream);
145- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmm failed. ERROR: %d\n", ret); return ret);145+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnAddmm failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
146 146 
147 // 4. (固定写法)同步等待任务执行结束147 // 4. (固定写法)同步等待任务执行结束
148 ret = aclrtSynchronizeStream(stream);148 ret = aclrtSynchronizeStream(stream);
149- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);149+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
150 150 
151 // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改151 // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改
152 auto size = GetShapeSize(outShape);152 auto size = GetShapeSize(outShape);
153 std::vector<float> resultData(size, 0);153 std::vector<float> resultData(size, 0);
154 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,154 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,
155 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);155 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);
156- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret);156+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
157 for (int64_t i = 0; i < size; i++) {157 for (int64_t i = 0; i < size; i++) {
158 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);158 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);
159 }159 }
@@ -164,27 +164,27 @@ int main() {
164 // 调用aclnnInplaceAddmm第一段接口164 // 调用aclnnInplaceAddmm第一段接口
165 uint64_t workspaceSizeForInplace = 0;165 uint64_t workspaceSizeForInplace = 0;
166 ret = aclnnInplaceAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, cubeMathType, &workspaceSizeForInplace, &executor);166 ret = aclnnInplaceAddmmGetWorkspaceSize(self, mat1, mat2, beta, alpha, cubeMathType, &workspaceSizeForInplace, &executor);
167- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmmGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);167+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmmGetWorkspaceSize failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
168 // 根据第一段接口计算出的workspaceSize申请device内存168 // 根据第一段接口计算出的workspaceSize申请device内存
169 void* workspaceAddrForInplace = nullptr;169 void* workspaceAddrForInplace = nullptr;
170 std::unique_ptr<void, aclError (*)(void*)> workspaceAddrForInplacePtr(nullptr, aclrtFree);170 std::unique_ptr<void, aclError (*)(void*)> workspaceAddrForInplacePtr(nullptr, aclrtFree);
171 if (workspaceSizeForInplace > 0) {171 if (workspaceSizeForInplace > 0) {
172 ret = aclrtMalloc(&workspaceAddrForInplace, workspaceSizeForInplace, ACL_MEM_MALLOC_HUGE_FIRST);172 ret = aclrtMalloc(&workspaceAddrForInplace, workspaceSizeForInplace, ACL_MEM_MALLOC_HUGE_FIRST);
173- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret);173+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
174 workspaceAddrForInplacePtr.reset(workspaceAddrForInplace);174 workspaceAddrForInplacePtr.reset(workspaceAddrForInplace);
175 }175 }
176 // 调用aclnnInplaceAddmm第二段接口176 // 调用aclnnInplaceAddmm第二段接口
177 ret = aclnnInplaceAddmm(workspaceAddrForInplace, workspaceSizeForInplace, executor, stream);177 ret = aclnnInplaceAddmm(workspaceAddrForInplace, workspaceSizeForInplace, executor, stream);
178- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmm failed. ERROR: %d\n", ret); return ret);178+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnInplaceAddmm failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
179 179 
180 // step4(固定写法)同步等待任务执行结束180 // step4(固定写法)同步等待任务执行结束
181 ret = aclrtSynchronizeStream(stream);181 ret = aclrtSynchronizeStream(stream);
182- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);182+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
183 183 
184 // step5 获取输出的值,将device侧内存上的结果拷贝至host侧184 // step5 获取输出的值,将device侧内存上的结果拷贝至host侧
185 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), selfDeviceAddr,185 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), selfDeviceAddr,
186 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);186 size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST);
187- CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret);187+ CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d.\n[ERROR msg]%s", ret, aclGetRecentErrMsg()); return ret);
188 for (int64_t i = 0; i < size; i++) {188 for (int64_t i = 0; i < size; i++) {
189 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);189 LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]);
190 }190 }