Помогите, пытаюсь улучшить скорость передачи данных в библиотеке
https://github.com/amcelroy/OpenCLV заменой read/write на map/unmap.
Но постоянно возникает ошибка между clEnqueueMapImage и clEnqueueUnmapMemObject. Даже если вместо memcpy использую простой цикл с присваиванием. Даже если просто один байт копирую или присваиваю.
Кусок кода, где возникает ошибка:
size_t HostOrigin[3] = {0,0,0};
size_t Region[3] = {sizeof(unsigned int)*HostWidth, HostHeight, HostDepth};
void* map_ptr = clEnqueueMapImage(d->GetQueue(), DeviceMem, CL_TRUE, CL_MAP_WRITE, HostOrigin, Region, &HostRowPitch, &HostSlicePitch, 0, NULL, NULL, NULL);
memcpy(map_ptr, Data, HostWidth * HostHeight * sizeof(unsigned int)); ///ERROR ????????????
*Error = clEnqueueUnmapMemObject(d->GetQueue(), DeviceMem, map_ptr, 0, NULL, NULL);
Создание буфера:
cl_mem temp = clCreateBuffer(d->GetContext(), CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, Size, NULL, Error);
HostSlicePitch после clEnqueueMapImage != 0
Что я делаю не так?