对于OpenCL中每个API函数都有相应的函数执行状态,如函数clGetPlatformIDs()的返回值,或函数clCreateContext()最后一个参数errcode_ret。
我们可以通过检查这个执行状态来获知某个OpenCL主机端的函数API是否执行成功,还是由于某些资源限制等问题使函数执行失败。成功执行,返回的状态为CL_SUCCESS,如果执行失败都会有相应的错误码。在opencl.h头文件中,列出了所有可能的错误代码,这些错误代码在下表中列出来。
如果OpenCL API执行返回状态不是CL_SUCCESS,可以用表格中的错误码对比函数返回状态,能够很快分析并解决程序中的问题。例如:
_kernel void SobelProecess(global char *SrcData,
global char *DstData )
{
……
}
内核函数名为SobelProcess,在创建内核时,我们手误输入如下:
cl_int err
cl_kernel kernel = clCreateKernel(program, "Sobelproecess",
&err);
此时,err的返回值为CL_INVALID_KERNEL_NAME(-46)。根据函数返回执行状态err,我们可以找出OpenCL API执行是否成功,如果不成功,根据错误代码分析出错误原因。