关于OpenCL中cl_mem的问题

smu*_*kes 4 memory types boilerplate opencl

我一直在我的一些OpenCL样板代码中使用cl_mem,但我一直在通过上下文使用它,而不是对它究竟是什么有深刻的理解.我一直在使用它作为内存的一种类型我推进和离开板,到目前为止浮动.我试着查看OpenCL文档,但cl_mem没有显示(是吗?).是否有任何文件,或者它是否简单,有人可以解释.

grr*_*sel 11

cl_mem类型是"Memory Object"的句柄(如OpenCL 1.1 Spec的第3.5节所述).这些本质上是OpenCL内核的输入和输出,并通过主机代码(如clCreateBuffer)中的OpenCL API调用返回

cl_mem  clCreateBuffer (cl_context context, cl_mem_flags flags,
                            size_t size, void *host_ptr, cl_int *errcode_ret) 
Run Code Online (Sandbox Code Playgroud)

所表示的存储区域可以被允许不同的访问模式,例如只读,或者被分配在不同的存储区域中,这取决于创建缓冲区调用中设置的标志.

通常存储句柄以允许稍后调用以释放存储器,例如:

cl_int  clReleaseMemObject (cl_mem memobj)  
Run Code Online (Sandbox Code Playgroud)

简而言之,它提供了内存实际位置的抽象:您可以将数据复制到关联的内存中或通过OpenCL API clEnqueueWriteBuffer和clEnqueueReadBuffer退出,但OpenCL实现可以分配它想要的空间.


Quo*_*nux 6

对于计算机而言,cl_mem是一个数字(就像Linux的文件处理程序),它被保留用作"内存标识符"(API /驱动程序,无论在这个数字下存储有关内存的信息,它都知道它拥有什么/如何很棒,就像这样的东西)