Mapping Memory Objects (USE_HOST_PTR)
As the host code shares the physical memory with CPU OpenCL™ device,
you can do one of the following to avoid unnecessary copies:
- Request the framework to allocate memory on the host.
- Allocate properly aligned memory yourself and share the pointer with the framework.
- Use calls toclEnqueueMapBufferandclEnqueueUnmapBufferinstead of calls toclEnqueueReadBufferorclEnqueueWriteBuffer.
If your application uses a specific memory management algorithm, or
if you need more control over memory allocation, you can allocate a buffer
and then pass the pointer at
clCreateBuffer
time with the
CL_MEM_USE_HOST_PTR
flag. However, the pointer must be aligned
to the certain boundary. Otherwise, the framework may perform memory copies.
Consider to query the required memory alignment using clGetDeviceInfo
with CL_DEVICE_MEM_BASE_ADDR_ALIGN
token.You can also map image objects (for CPU OpenCL device), creating them
with the
CL_MEM_USE_HOST_PTR
flag.See Also
OpenCL™ 1.2 Specification at
Overview Presentations of the OpenCL™ Standard at