文档
注册
评分
提单
论坛
小AI

aclrtGetMemUceInfo

Atlas 200/300/500 推理产品,不支持该接口。

Atlas 训练系列产品,不支持该接口。

Atlas 推理系列产品(Ascend 310P处理器),不支持该接口。

Atlas 200I/500 A2推理产品不支持该接口。

函数功能

获取内存UCE(uncorrect error,指系统硬件不能直接处理恢复内存错误)的错误虚拟地址

使用场景及流程:调用AscendCL接口返回ACL_ERROR_RT_DEVICE_MTE_ERROR时,可调用本接口,但需与以下其它接口配合使用,获取并修复内存UCE的错误虚拟地址
  1. 调用aclrtGetMemUceInfo接口获取内存UCE的错误虚拟地址。
  2. 调用aclrtDeviceTaskAbort接口停止对应Device上正在执行的任务。
  3. 调用aclrtMemUceRepair接口修复内存UCE的错误虚拟地址。
  4. 修复问题后,重新跑业务。

函数原型

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);
    }

    //  根据业务场景做场景的恢复处理
}

// 继续执行业务
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词