OpenCL 我需要释放主机指针吗
OpenCL do I need to free host pointer
如果我使用选项 CL_MEM_USE_HOST_PTR 创建一个 OpenCL 缓冲区,然后在使用它之后在缓冲区上调用 clReleaseMemObject,我仍然需要在我动态分配的内存上调用 free 。此外,如果内核写入缓冲区,它会在我调用 clReleaseMemObject 后与主机指针同步,以便我可以读取结果吗?
您必须释放内存本身。
想一想 - OpenCL 怎么知道为您释放内存的正确方法?可能来自 malloc
,或者可能来自 alloca
,或者可能来自 VirtualAlloc
(在 Windows)或 sbrk
(在 Linux),或者它可能是一个全局变量,或者它可能是一个内存映射文件,或者它可能是一个字符串文字。或许你还能想到更多。
OpenCL 不知道其中哪一个是正确的,即使知道,它甚至不知道您想要 释放内存。 (取消映射那个文件只是因为你已经完成了对它的 OpenCL 的使用?也许你想 运行 一些非 OpenCL 代码在相同的数据上!)
如果我使用选项 CL_MEM_USE_HOST_PTR 创建一个 OpenCL 缓冲区,然后在使用它之后在缓冲区上调用 clReleaseMemObject,我仍然需要在我动态分配的内存上调用 free 。此外,如果内核写入缓冲区,它会在我调用 clReleaseMemObject 后与主机指针同步,以便我可以读取结果吗?
您必须释放内存本身。
想一想 - OpenCL 怎么知道为您释放内存的正确方法?可能来自 malloc
,或者可能来自 alloca
,或者可能来自 VirtualAlloc
(在 Windows)或 sbrk
(在 Linux),或者它可能是一个全局变量,或者它可能是一个内存映射文件,或者它可能是一个字符串文字。或许你还能想到更多。
OpenCL 不知道其中哪一个是正确的,即使知道,它甚至不知道您想要 释放内存。 (取消映射那个文件只是因为你已经完成了对它的 OpenCL 的使用?也许你想 运行 一些非 OpenCL 代码在相同的数据上!)