Информация об изменениях

Сообщение [OpenCL] ошибка между clEnqueueMapImage и clEnqueueUnmapMemO от 20.06.2018 8:58

Изменено 20.06.2018 9:04 _Cyber_

[OpenCL] ошибка между clEnqueueMapImage и clEnqueueUnmapMemObject
Помогите, пытаюсь улучшить скорость передачи данных в библиотеке 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

Что я делаю не так?
[OpenCL] ошибка между clEnqueueMapImage и clEnqueueUnmapMemO
Помогите, пытаюсь улучшить скорость передачи данных в библиотеке 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

Что я делаю не так?