3 Replies Latest reply on Feb 23, 2010 6:25 PM by FangQ

    How can I look up error code?

    vsfan
      Error code lookup for OpenCL using AMD stream SDK

      Hi,

      How can I look up the error code returned by the opencl function calls?

      Now I am trying to figure out an error code "-4", returned by the following code (ERR_REPORT is a defined macro to show the error, if there is any),

       

       

      str_fngapdistD = clCreateBuffer(context, CL_MEM_READ_WRITE, nDistSize, NULL, &err);ERR_REPORT

      str_fhgapdistD = clCreateBuffer(context, CL_MEM_READ_WRITE, nDistSize, NULL, &err);ERR_REPORT

      str_fvgapdistD = clCreateBuffer(context, CL_MEM_READ_WRITE, nDistSize, NULL, &err);ERR_REPORT

      The first call is successful, the following two failed and returned an error code "-4", I did not find the matching OpenCL error easily, could anyone here help me with that error code?
      Thanks!
      Yours,
      Yang


        • How can I look up error code?
          omkaranathan

          Error code -4 is CL_MEM_OBJECT_ALLOCATION_FAILURE, you can find all the error codes in cl.h file.

          • How can I look up error code?
            FangQ

            the attached function is my modified version of an error reporting subroutine I found online. Feel free to use it.

            char *print_cl_errstring(cl_int err) { switch (err) { case CL_SUCCESS: return strdup("Success!"); case CL_DEVICE_NOT_FOUND: return strdup("Device not found."); case CL_DEVICE_NOT_AVAILABLE: return strdup("Device not available"); case CL_COMPILER_NOT_AVAILABLE: return strdup("Compiler not available"); case CL_MEM_OBJECT_ALLOCATION_FAILURE: return strdup("Memory object allocation failure"); case CL_OUT_OF_RESOURCES: return strdup("Out of resources"); case CL_OUT_OF_HOST_MEMORY: return strdup("Out of host memory"); case CL_PROFILING_INFO_NOT_AVAILABLE: return strdup("Profiling information not available"); case CL_MEM_COPY_OVERLAP: return strdup("Memory copy overlap"); case CL_IMAGE_FORMAT_MISMATCH: return strdup("Image format mismatch"); case CL_IMAGE_FORMAT_NOT_SUPPORTED: return strdup("Image format not supported"); case CL_BUILD_PROGRAM_FAILURE: return strdup("Program build failure"); case CL_MAP_FAILURE: return strdup("Map failure"); case CL_INVALID_VALUE: return strdup("Invalid value"); case CL_INVALID_DEVICE_TYPE: return strdup("Invalid device type"); case CL_INVALID_PLATFORM: return strdup("Invalid platform"); case CL_INVALID_DEVICE: return strdup("Invalid device"); case CL_INVALID_CONTEXT: return strdup("Invalid context"); case CL_INVALID_QUEUE_PROPERTIES: return strdup("Invalid queue properties"); case CL_INVALID_COMMAND_QUEUE: return strdup("Invalid command queue"); case CL_INVALID_HOST_PTR: return strdup("Invalid host pointer"); case CL_INVALID_MEM_OBJECT: return strdup("Invalid memory object"); case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return strdup("Invalid image format descriptor"); case CL_INVALID_IMAGE_SIZE: return strdup("Invalid image size"); case CL_INVALID_SAMPLER: return strdup("Invalid sampler"); case CL_INVALID_BINARY: return strdup("Invalid binary"); case CL_INVALID_BUILD_OPTIONS: return strdup("Invalid build options"); case CL_INVALID_PROGRAM: return strdup("Invalid program"); case CL_INVALID_PROGRAM_EXECUTABLE: return strdup("Invalid program executable"); case CL_INVALID_KERNEL_NAME: return strdup("Invalid kernel name"); case CL_INVALID_KERNEL_DEFINITION: return strdup("Invalid kernel definition"); case CL_INVALID_KERNEL: return strdup("Invalid kernel"); case CL_INVALID_ARG_INDEX: return strdup("Invalid argument index"); case CL_INVALID_ARG_VALUE: return strdup("Invalid argument value"); case CL_INVALID_ARG_SIZE: return strdup("Invalid argument size"); case CL_INVALID_KERNEL_ARGS: return strdup("Invalid kernel arguments"); case CL_INVALID_WORK_DIMENSION: return strdup("Invalid work dimension"); case CL_INVALID_WORK_GROUP_SIZE: return strdup("Invalid work group size"); case CL_INVALID_WORK_ITEM_SIZE: return strdup("Invalid work item size"); case CL_INVALID_GLOBAL_OFFSET: return strdup("Invalid global offset"); case CL_INVALID_EVENT_WAIT_LIST: return strdup("Invalid event wait list"); case CL_INVALID_EVENT: return strdup("Invalid event"); case CL_INVALID_OPERATION: return strdup("Invalid operation"); case CL_INVALID_GL_OBJECT: return strdup("Invalid OpenGL object"); case CL_INVALID_BUFFER_SIZE: return strdup("Invalid buffer size"); case CL_INVALID_MIP_LEVEL: return strdup("Invalid mip-map level"); default: return strdup("Unknown"); } }

            • How can I look up error code?
              FangQ

              also, I used the following two forms to detect error while keep the code neat:

              mcx_assess(clFinish(commands)); // if a function return value is the status

              or

              mcx_assess((context=clCreateContextFromType(...,&status),status));
              // if a function return status in the last parameter

              where mcx_access is defined as in the attached code.

              void mcx_assess(int cuerr){ if(cuerr!=CL_SUCCESS){ mcx_error(-(int)cuerr,print_cl_errstring(cuerr)); } }