Ошибка OpenCL Bus - PullRequest
       2

Ошибка OpenCL Bus

1 голос
/ 12 мая 2011

У меня проблема с моим кодом OpenCL. Я компилирую и запускаю его на процессоре (Core 2 Duo) Mac OS X 10.6.7. Вот код:

#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 КБ), тогда код работает нормально. Я пытался иметь только один рабочий элемент в одной рабочей группе. Знак * указывает на область памяти с тысячами килобайт данных. Я подозреваю, что ограничение частной памяти, но затем бросил ошибку при выделении памяти, а не при копировании.

Вот мой запрос устройства 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 Ответ

1 голос
/ 13 мая 2011

Вы используете переменную msg размером 512 КБ.Эта переменная должна находиться в приватной памяти.Частная память не такая большая.Насколько я знаю, это не должно работать.

Почему у вас есть параметры srcOffset и dstOffset?Вы не используете их.

Я не вижу больше проблем.Попробуйте выделить локальную память.У вас есть версия вашего кода без оптимизации?Версия, которая просто вычисляет в глобальной памяти?

...