В настоящее время я изучаю, как использовать OpenCL, но у меня возникла проблема с попыткой поставить ядро в очередь в мою очередь.
Предполагается, что ядро получит float и 2 буфера типа unsigned char и unsigned int -
__kernel void task2(float value,
__global unsigned char *chars,
__global unsigned int *ints)
Моя программа выглядит следующим образом -
bufferA = cl::Buffer(context, CL_MEM_WRITE_ONLY, sizeof(cl_uchar) * alphabets.size());
bufferB = cl::Buffer(context, CL_MEM_READ_WRITE, sizeof(cl_uint) * numbers.size());
kernel = cl::Kernel(prog, "kernelTest");
kernel.setArg(0, 2.55);
kernel.setArg(1, bufferA);
kernel.setArg(2, bufferB);
queue.enqueueTask(kernel);
, где буквы и цифры являются векторами. Программа построена успешно, но исключена, так как я думаю, что это не имеет отношения к этому вопросу.
При достижении части enqueueTask в программе я получаю сообщение об ошибке -
Error in: clSetKernelArg
Error code: -51 (CL_INVALID_ARG_SIZE)
Если я не полностью ошибаюсь, ядро принимает 3 аргумента, а я передаю три аргумента float, беззнаковый буфер Buffer и беззнаковый буфер Int соответственно. Я что-то не так делаю?