aclrtGetMemUceInfo
Atlas 200/300/500 推理产品,不支持该接口。
Atlas 训练系列产品,不支持该接口。
Atlas 推理系列产品(Ascend 310P处理器),不支持该接口。
Atlas 200I/500 A2推理产品不支持该接口。
函数功能
获取内存UCE(uncorrect error,指系统硬件不能直接处理恢复内存错误)的错误虚拟地址。
使用场景及流程:调用AscendCL接口返回ACL_ERROR_RT_DEVICE_MTE_ERROR时,可调用本接口,但需与以下其它接口配合使用,获取并修复内存UCE的错误虚拟地址:
- 调用aclrtGetMemUceInfo接口获取内存UCE的错误虚拟地址。
- 调用aclrtDeviceTaskAbort接口停止对应Device上正在执行的任务。
- 调用aclrtMemUceRepair接口修复内存UCE的错误虚拟地址。
- 修复问题后,重新跑业务。
函数原型
aclError aclrtGetMemUceInfo(int32_t deviceId, aclrtMemUceInfo *memUceInfoArray, size_t arraySize, size_t *retSize)
参数说明
参数名 |
输入/输出 |
说明 |
---|---|---|
deviceId |
输入 |
Device ID。 与aclrtSetDevice接口中Device ID保持一致。 |
memUceInfoArray |
输入&输出 |
aclrtMemUceInfo数组的指针。 |
arraySize |
输入 |
传入aclrtMemUceInfo数组的长度。 |
retSize |
输出 |
实际返回的aclrtMemUceInfo数组的有效长度。 |
返回值说明
返回0表示成功,返回非0表示失败。
示例代码
调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。
aclrtMemUceInfo memUceInfoArray[128]; int deviceId = 0; aclError ret; aclrtStream stream; // 初始化 aclInit(null); aclrtSetDevice(deviceId); aclrtCreateStream(&stream); // 对stream异步下发任务执行 ret = aclrtSynchronizeStream(stream); // 执行过程中遇到错误ACL_ERROR_RT_DEVICE_MTE_ERROR if (ret == ACL_ERROR_RT_DEVICE_MTE_ERROR) { // 获取uce地址故障信息 size_t retSize; ret = aclrtGetMemUceInfo(deviceId, memUceInfoArray, 128, &retSize); if (ret != ACL_RT_SUCCESS) { __exit(1); } // 根据业务判断地址的影响 // device的taskabort丢弃清理。 ret = aclrtDeviceTaskAbort(deviceId, 50000); if (ret != ACL_RT_SUCCESS) { __exit(1); } // uce地址故障修复 ret = aclrtMemUceRepair(deviceId, memUceInfoArray, retSize); if (ret != ACL_RT_SUCCESS) { __exit(1); } // 根据业务场景做场景的恢复处理 } // 继续执行业务
父主题: 异常处理