Тип cl_mem является дескриптором «объекта памяти» (как описано в разделе 3.5 спецификации OpenCL 1.1 ).По сути, они являются входами и выходами для ядер OpenCL и возвращаются из вызовов API OpenCL в коде хоста, таком как clCreateBuffer
cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags,
size_t size, void *host_ptr, cl_int *errcode_ret)
Представленным областям памяти могут быть разрешены разные шаблоны доступа, например, только для чтения, или они могут быть выделены вразличные области памяти, в зависимости от флагов, установленных в вызовах создания буфера.
Дескриптор обычно сохраняется, чтобы позволить более позднему вызову освободить память, например:
cl_int clReleaseMemObject (cl_mem memobj)
Короче говоря,он обеспечивает абстракцию того, где на самом деле находится память: вы можете скопировать данные в связанную память или вернуться через API-интерфейсы OpenCL clEnqueueWriteBuffer и clEnqueueReadBuffer, но реализация OpenCL может выделить место, где она хочет.