我一直在我的一些 OpenCL 样板代码中使用 cl_mem,但我一直在通过上下文使用它,而不是对它到底是什么有一个清晰的理解。我一直将它用作我在板上和下推的内存的一种类型,到目前为止它一直是浮动的。我尝试查看 OpenCL 文档,但 cl_mem 没有出现(是吗?)。是否有任何文档,或者它是否简单并且有人可以解释。
问问题
11925 次
2 回答
11
cl_mem 类型是“内存对象”的句柄(如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 实现可以根据需要分配空间。
于 2010-10-12T22:29:59.337 回答
6
对于计算机,cl_mem 是一个数字(如 Linux 的文件处理程序),保留用作“内存标识符”(API/驱动程序在此数字下存储有关您的内存的信息,它知道它持有什么/如何它是大的和类似的东西)
于 2010-10-11T17:07:09.637 回答