我一直在我的一些OpenCL样板代码中使用cl_mem,但我一直在通过上下文使用它,而不是对它究竟是什么有深刻的理解。我一直在使用它作为内存的一种类型我推进和离开板,到目前为止浮动。我试着查看OpenCL文档,但cl_mem没有显示(是吗?)。是否有任何文件,或者它是否简单,有人可以解释。
答案 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 /驱动程序,无论在这个数字下存储有关内存的信息,它都知道它是什么持有/它有多大和类似的东西)