关于OpenCL中cl_mem的问题

时间:2010-10-11 14:25:36

标签: memory types opencl boilerplate

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

2 个答案:

答案 0 :(得分: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) 

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

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

cl_int  clReleaseMemObject (cl_mem memobj)  

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

答案 1 :(得分:6)

对于计算机而言,cl_mem是一个数字(就像Linux的文件处理程序),它被保留用作“内存标识符”(API /驱动程序,无论在这个数字下存储有关内存的信息,它都知道它是什么持有/它有多大和类似的东西)