2013-10-02 38 views
0

運行在NVIDIA GPU簡單的OpenCL矩陣乘法代碼,我得到錯誤代碼-30。我想知道這段代碼是什麼意思。我相信這個代碼(int)對應的字符串必須存儲在某個地方。有人可以幫我解釋這段代碼嗎?一旦我知道這個錯誤意味着我可以輕鬆地調試我的代碼。在哪裏可以找到OpenCL中(英偉達)的錯誤代碼字符串?

回答

2

CLEW庫:

const char* clewErrorString(cl_int error) 
{ 
    static const char* strings[] = 
    { 
     // Error Codes 
      "CL_SUCCESS"         // 0 
     , "CL_DEVICE_NOT_FOUND"       // -1 
     , "CL_DEVICE_NOT_AVAILABLE"      // -2 
     , "CL_COMPILER_NOT_AVAILABLE"     // -3 
     , "CL_MEM_OBJECT_ALLOCATION_FAILURE"   // -4 
     , "CL_OUT_OF_RESOURCES"       // -5 
     , "CL_OUT_OF_HOST_MEMORY"      // -6 
     , "CL_PROFILING_INFO_NOT_AVAILABLE"    // -7 
     , "CL_MEM_COPY_OVERLAP"       // -8 
     , "CL_IMAGE_FORMAT_MISMATCH"     // -9 
     , "CL_IMAGE_FORMAT_NOT_SUPPORTED"    // -10 
     , "CL_BUILD_PROGRAM_FAILURE"     // -11 
     , "CL_MAP_FAILURE"        // -12 

     , "" // -13 
     , "" // -14 
     , "" // -15 
     , "" // -16 
     , "" // -17 
     , "" // -18 
     , "" // -19 

     , "" // -20 
     , "" // -21 
     , "" // -22 
     , "" // -23 
     , "" // -24 
     , "" // -25 
     , "" // -26 
     , "" // -27 
     , "" // -28 
     , "" // -29 

     , "CL_INVALID_VALUE"       // -30 
     , "CL_INVALID_DEVICE_TYPE"      // -31 
     , "CL_INVALID_PLATFORM"       // -32 
     , "CL_INVALID_DEVICE"       // -33 
     , "CL_INVALID_CONTEXT"       // -34 
     , "CL_INVALID_QUEUE_PROPERTIES"     // -35 
     , "CL_INVALID_COMMAND_QUEUE"     // -36 
     , "CL_INVALID_HOST_PTR"       // -37 
     , "CL_INVALID_MEM_OBJECT"      // -38 
     , "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"   // -39 
     , "CL_INVALID_IMAGE_SIZE"      // -40 
     , "CL_INVALID_SAMPLER"       // -41 
     , "CL_INVALID_BINARY"       // -42 
     , "CL_INVALID_BUILD_OPTIONS"     // -43 
     , "CL_INVALID_PROGRAM"       // -44 
     , "CL_INVALID_PROGRAM_EXECUTABLE"    // -45 
     , "CL_INVALID_KERNEL_NAME"      // -46 
     , "CL_INVALID_KERNEL_DEFINITION"    // -47 
     , "CL_INVALID_KERNEL"       // -48 
     , "CL_INVALID_ARG_INDEX"      // -49 
     , "CL_INVALID_ARG_VALUE"      // -50 
     , "CL_INVALID_ARG_SIZE"       // -51 
     , "CL_INVALID_KERNEL_ARGS"      // -52 
     , "CL_INVALID_WORK_DIMENSION"     // -53 
     , "CL_INVALID_WORK_GROUP_SIZE"     // -54 
     , "CL_INVALID_WORK_ITEM_SIZE"     // -55 
     , "CL_INVALID_GLOBAL_OFFSET"     // -56 
     , "CL_INVALID_EVENT_WAIT_LIST"     // -57 
     , "CL_INVALID_EVENT"       // -58 
     , "CL_INVALID_OPERATION"      // -59 
     , "CL_INVALID_GL_OBJECT"      // -60 
     , "CL_INVALID_BUFFER_SIZE"      // -61 
     , "CL_INVALID_MIP_LEVEL"      // -62 
     , "CL_INVALID_GLOBAL_WORK_SIZE"     // -63 
     , "CL_UNKNOWN_ERROR_CODE" 
    }; 

    if (error >= -63 && error <= 0) 
     return strings[-error]; 
    else 
     return strings[64]; 
} 

有一個nVIDIA的版本,這些AMD的版本。但我更喜歡以OpenSource的方式進行操作。

+0

感謝您的快速幫助。順便說一下,如上所示的字符串映射的錯誤代碼是標準的一部分?如果是這樣那麼NVIDIA想必也這樣 – gpuguy

+1

使用它,我編輯了更安全的方式。是的,代碼是'cl.h'文件的一部分。 – DarkZeros

+0

這也正是我一直在尋找 – gpuguy

1

如果您在C++的時候,你可以在Boost.Compute庫使用opencl_error::to_string()功能。這將返回一個std::string與一OpenCL的錯誤代碼人類可讀的描述。

例如:

std::cout << opencl_error::to_string(CL_INVALID_KERNEL_ARGS) << std::cout; 

會打印:

"Invalid Kernel Arguments" 

在這裏看到的文檔:http://boostorg.github.io/compute/boost/compute/opencl_error.html

相關問題