2011-05-12 102 views
1

我的OpenCL代碼有問題。我在CPU(Core 2 duo)Mac OS X 10.6.7上編譯並運行它。下面是代碼:OpenCL總線錯誤

#define BUFSIZE (524288) // 512 KB 
#define BLOCKBYTES (32) // 32 B 
__kernel void test(__global unsigned char *in, 
        __global unsigned char *out, 
        unsigned int srcOffset, 
        unsigned int dstOffset) { 
    int grId = get_group_id(0); 
    unsigned char msg[BUFSIZE]; 
    srcOffset = grId * BUFSIZE; 
    dstOffset = grId * BLOCKBYTES; 

    // Copy from global to private memory 
    size_t i; 
    for (i = 0; i < BUFSIZE; i++) 
     msg[i] = in[ srcOffset + i ]; 

    // Make some computation here, not complicated logic  

    // Copy from private to global memory 
    for (i = 0; i < BLOCKBYTES; i++) 
     out[ dstOffset + i ] = msg[i]; 
} 

代碼給了我一個運行時錯誤「總線錯誤」。當我在週期中幫助printf從全局拷貝到私有內存,然後在那裏看到錯誤發生,每次都在i的不同迭代中。當我將BUFSIZE減小到262144(256 KB)時,代碼運行良好。我試圖在一個工作組上只有一個工作項目。 *指向內存區域,其中有數千KB的數據。我懷疑要限制私人內存,但是在分配內存時拋出一個錯誤,而不是在複製時拋出。

這裏是我的OpenCL設備查詢:

-

-------------------------------- 
Device Intel(R) Core(TM)2 Duo CPU  P7550 @ 2.26GHz 
--------------------------------- 
    CL_DEVICE_NAME:   Intel(R) Core(TM)2 Duo CPU  P7550 @ 2.26GHz 
    CL_DEVICE_VENDOR:    Intel 
    CL_DRIVER_VERSION:   1.0 
    CL_DEVICE_VERSION:   OpenCL 1.0 
    CL_DEVICE_TYPE:   CL_DEVICE_TYPE_CPU 
    CL_DEVICE_MAX_COMPUTE_UNITS:  2 
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3 
    CL_DEVICE_MAX_WORK_ITEM_SIZES: 1/1/1 
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 1 
    CL_DEVICE_MAX_CLOCK_FREQUENCY: 2260 MHz 
    CL_DEVICE_ADDRESS_BITS:  32 
    CL_DEVICE_MAX_MEM_ALLOC_SIZE:  1024 MByte 
    CL_DEVICE_GLOBAL_MEM_SIZE:  1535 MByte 
    CL_DEVICE_ERROR_CORRECTION_SUPPORT: no 
    CL_DEVICE_LOCAL_MEM_TYPE:  global 
    CL_DEVICE_LOCAL_MEM_SIZE:  16 KByte 
    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 64 KByte 
    CL_DEVICE_QUEUE_PROPERTIES:  CL_QUEUE_PROFILING_ENABLE 
    CL_DEVICE_IMAGE_SUPPORT:  1 
    CL_DEVICE_MAX_READ_IMAGE_ARGS: 128 
    CL_DEVICE_MAX_WRITE_IMAGE_ARGS: 8 
    CL_DEVICE_SINGLE_FP_CONFIG:  denorms INF-quietNaNs round-to-nearest 

    CL_DEVICE_IMAGE <dim>   2D_MAX_WIDTH  8192 
        2D_MAX_HEIGHT 8192 
        3D_MAX_WIDTH  2048 
        3D_MAX_HEIGHT 2048 
        3D_MAX_DEPTH  2048 

    CL_DEVICE_EXTENSIONS:   cl_khr_fp64 
        cl_khr_global_int32_base_atomics 
        cl_khr_global_int32_extended_atomics 
        cl_khr_local_int32_base_atomics 
        cl_khr_local_int32_extended_atomics 
        cl_khr_byte_addressable_store 
        cl_APPLE_gl_sharing 
        cl_APPLE_SetMemObjectDestructor 
        cl_APPLE_ContextLoggingFunctions 

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t> CHAR 16, SHORT 8, INT 4, LONG 2, FLOAT 4, DOUBLE 2 

回答

1

你使用一個變量味精,大小爲512KB。這個變量應該在私人內存中。私人記憶力不是那麼大。就我所知,這應該不起作用。

爲什麼你有參數srcOffsetdstOffset?你不使用它們。

我沒有看到更多的問題。嘗試分配本地內存。你有沒有優化運行的代碼版本?一個只在全局內存中計算的版本?