我试图了解何时在英特尔的CPU-GPU Soc上使用CL_MEM_USE_HOST_PTR
。
阅读this guide我遇到了:
如果您的应用程序使用特定的内存管理算法,或者如果 您希望包装现有的本机应用程序内存分配 可以传递指向clCreateBuffer的指针 CL_MEM_USE_HOST_PTR标志。
有人可以通过示例解释:specific memory management algorithm
和wrap existing native application memory allocations
的含义是什么。
答案 0 :(得分:1)
CL_MEM_USE_HOST_PTR标志意味着,OpenCL内存对象的内存不会在设备端分配,而是在内存中使用,在主机端分配。但是,内存内容可能会被缓存(这对用户来说是不透明的)。
想象一下,你有一个复杂的库,它有自己复杂的内存分配机制(例如引用计数)等等。分配OpenCL内存对象并不那么容易(通常是不可能的) "手工",因为它们必须具有相同的生命周期对象,由库分配,(可能 - 相同的对齐)等。
在这种情况下,在创建OpenCL内存对象时,更容易使用CL_MEM_USE_HOST_PTR标志。所有对象处理都将在引擎盖下完成。这种方式可以为您节省很多痛苦,特别是当您使用在纯C上实现的大型项目时,内存对象处理总是很棘手。