OpenCL error处理显示函数
在编写OpenCL程序的时候,遇到返回错误,每次都需要网上查,或者要打开用户手册去查, 总结了以下的函数,错误调用就能看到对应的错误了。
static void cl_error(cl_int err,char * funName){
if(err!=CL_SUCCESS){
fprintf(stderr,funName);fprintf(stderr,": opencl error: %d, ",err);switch(err){
case -1:fprintf(stderr,"CL_DEVICE_NOT_FOUND\n");break;case -2:fprintf(stderr,"CL_DEVICE_NOT_AVAILABLE\n");break;case -3:fprintf(stderr,"CL_COMPILER_NOT_AVAILABLE\n");break;case -4:fprintf(stderr,"CL_MEM_OBJECT_ALLOCATION_FAILURE\n");break;case -5:fprintf(stderr,"CL_OUT_OF_RESOURCES\n");break;case -6:fprintf(stderr,"CL_OUT_OF_HOST_MEMORY\n");break;case -7:fprintf(stderr,"CL_PROFILING_INFO_NOT_AVAILABLE\n");break;case -8:fprintf(stderr,"CL_MEM_COPY_OVERLAP\n");break;case -9:fprintf(stderr,"CL_IMAGE_FORMAT_MISMATCH\n");break;case -10:fprintf(stderr,"CL_IMAGE_FORMAT_NOT_SUPPORTED\n");break;case -11:fprintf(stderr,"CL_BUILD_PROGRAM_FAILURE\n");break;case -12:fprintf(stderr,"CL_MAP_FAILURE\n");break;case -13:fprintf(stderr,"CL_MISALIGNED_SUB_BUFFER_OFFSET\n");break;case -14:fprintf(stderr,"CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST\n");break;case -30:fprintf(stderr,"CL_INVALID_VALUE\n");break;case -31:fprintf(stderr,"CL_INVALID_DEVICE_TYPE\n");break;case -32:fprintf(stderr,"CL_INVALID_PLATFORM\n");break;case -33:fprintf(stderr,"CL_INVALID_DEVICE\n");break;case -34:fprintf(stderr,"CL_INVALID_CONTEXT\n");break;case -35:fprintf(stderr,"CL_INVALID_QUEUE_PROPERTIES\n");break;case -36:fprintf(stderr,"CL_INVALID_COMMAND_QUEUE\n");break;case -37:fprintf(stderr,"CL_INVALID_HOST_PTR\n");break;case -38:fprintf(stderr,"CL_INVALID_MEM_OBJECT\n");break;case -39:fprintf(stderr,"CL_INVALID_IMAGE_FORMAT_DESCRIPTOR\n");break;case -40:fprintf(stderr,"CL_INVALID_IMAGE_SIZE\n");break;case -41:fprintf(stderr,"CL_INVALID_SAMPLER\n");break;case -42:fprintf(stderr,"CL_INVALID_BINARY\n");break;case -43:fprintf(stderr,"CL_INVALID_BUILD_OPTIONS\n");break;case -44:fprintf(stderr,"CL_INVALID_PROGRAM\n");break;case -45:fprintf(stderr,"CL_INVALID_PROGRAM_EXECUTABLE\n");break;case -46:fprintf(stderr,"CL_INVALID_KERNEL_NAME\n");break;case -47:fprintf(stderr,"CL_INVALID_KERNEL_DEFINITION\n");break;case -48:fprintf(stderr,"CL_INVALID_KERNEL\n");break;case -49:fprintf(stderr,"CL_INVALID_ARG_INDEX\n");break;case -50:fprintf(stderr,"CL_INVALID_ARG_VALUE\n");break;case -51:fprintf(stderr,"CL_INVALID_ARG_SIZE\n");break;case -52:fprintf(stderr,"CL_INVALID_KERNEL_ARGS\n");break;case -53:fprintf(stderr,"CL_INVALID_WORK_DIMENSION\n");break;case -54:fprintf(stderr,"CL_INVALID_WORK_GROUP_SIZE\n");break;case -55:fprintf(stderr,"CL_INVALID_WORK_ITEM_SIZE\n");break;case -56:fprintf(stderr,"CL_INVALID_GLOBAL_OFFSET\n");break;case -57:fprintf(stderr,"CL_INVALID_EVENT_WAIT_LIST\n");break;case -58:fprintf(stderr,"CL_INVALID_EVENT\n");break;case -59:fprintf(stderr,"CL_INVALID_OPERATION\n");break;case -60:fprintf(stderr,"CL_INVALID_GL_OBJECT\n");break;case -61:fprintf(stderr,"CL_INVALID_BUFFER_SIZE\n");break;case -62:fprintf(stderr,"CL_INVALID_MIP_LEVEL\n");break;case -63:fprintf(stderr,"CL_INVALID_GLOBAL_WORK_SIZE\n");break;case -64:fprintf(stderr,"CL_INVALID_PROPERTY\n");break;default:fprintf(stderr,"unknown error.\n");break;}exit(-1);}
}