Your understanding is correct, except for one possible mistake: the documentation states that
OpenCL host_ptr . .
, , , host_ptr. , host_ptr , .
, . , / :
CL_MEM_USE_HOST_PTR, mem_flags, host_ptr, clCreateBuffer, , , clEnqueueMapBuffer ; clEnqueueMapBuffer, host_ptr .
, Khronos:
cl_mem device_output = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, size, original_output, NULL);
void* pointer = clEnqueueMapBuffer(queue, device_output, CL_TRUE, CL_MAP_READ, size, 0, 0, NULL, NULL, NULL);
clEnqueueUnmapMemObject(queue, device_output, pointer, 0, NULL, NULL);
clReleaseMemObject(device_output);