***********************2. AICERROR code*********************** #AI Core error错误码及解释。 code : 0x4
该错误码含义是函数调用深度超过设置值,cce算子函数之间的调用层次超过了阈值,而这个阈值是由一个寄存器来控制的,关于阈值说明如下。
【5:2】:T,调用栈溢出阈值,超过T+1的嵌套调用都会上报可屏蔽错误,由于UB作为调用栈,其大小是有限的,现在我们假设每个函数调用占用4KB堆栈,而UB保留16KB作为总堆栈,所以初始复位值为3。
默认值V100 ISA是3(现在V200 ISA默认值改成了2),只要嵌套不超过4层就不会有问题,所以推测有如下两种情况:
***********************1. Basic information******************** #AI Core error发生时设备的基本信息。 #kernel name:算子名称。 #op address: 算子代码在ddr内存的地址。 #args address:算子参数在ddr内存的地址。 error time : 2020-08-26-11:24:07 device id : 0 core id : 0 task id : 60 stream id : 517 node name : trans_TransData_167 kernel name : te_transdata_16b6e15e2a5cc7f70_33e5fb7ae8478ddb op address : 0x101000120000 args address : 0X101000053000
对于要实现atomic_add的场景,设置CTRL指令参考如下,以FP32为例。
uint64_t ctrl_reg = get_ctrl(); uint64_t config_reg = (ctrl_reg | ((uint64_t)1 << 60)) ; // uint64_t configReg = (ctrlReg | ((uint64_t)1 << 60)) & (~((uint64_t)0 << 61));这个更标准一些 set_ctrl(config_reg); set_ctrl(ctrl_reg); // 指令还原