是否可以释放由clEnqueueMapBuffer
创建的主机内存?
例如,创建缓冲区并映射主机内存:
cl_mem buffer = clCreateBuffer(...);
float* dataPtr = (float*)clEnqueueMapBuffer(...,buffer,...);
做一些OpenCL的东西,然后清理:
clEnqueueUnmapMemObject(...,buffer,(void *)dataPtr,...);
clReleaseMemObject(buffer);
但是,此时dataPtr
不为空。如何释放clEnqueueMapBuffer
分配的主机上的内存?删除和免费不起作用,我在OpenCL文档中找不到任何提供释放缓冲区的方法。
答案 0 :(得分:2)
据我所知,clEnqueueMapBuffer实际上并没有像那样分配任何内存,而是将主机上的某个地址范围映射为主机内存但实际上是指设备内存。这意味着它不需要解除分配,因为clEnqueueMapBuffer首先没有分配任何内存(new / malloc样式)