CL_MEM_USE_HOST_PTR与CL_MEM_COPY_HOST_PTR对比CL_MEM_ALLOC_HOST_PTR

时间:2014-08-26 01:22:56

标签: opencl

在OpenCl By Action一书中我读到了这个:

CL_MEM_USE_HOST_PTR:内存对象将访问主机指定的内存区域 指针。

CL_MEM_COPY_HOST_PTR:内存对象将设置主机指针指定的内存区域。

CL_MEM_ALLOC_HOST_PTR:主机可访问内存中的区域将被分配用于数据传输。

我对这三面旗帜感到十分困惑。

我想知道至少前两个有什么不同。

1-In CL_MEM_USE_HOST_PTR在CL_MEM_COPY_HOST_PTR内存对象将访问内存区域内存对象将设置内存区域(在两种情况下由主机指定)。这个设置和访问有何不同? 然后第三个又让我很困惑。

2-是否所有这些固定内存分配?

1 个答案:

答案 0 :(得分:12)

CL_MEM_COPY_HOST_PTR只是在创建缓冲区时复制值。

CL_MEM_USE_HOST_PTR维护对该内存区域的引用,并且根据实现,它可以在内核执行时直接访问它,也可以对其进行缓存。如果要使用此编写跨平台代码,则必须使用mapbuffer来提供同步点。

CL_MEM_ALLOC_HOST_PTR是唯一经常固定内存的。作为AMD的一个例子,这个分配固定的存储区域。通常,如果您使用CL_MEM_USE_HOST_PTR,它将简单地在内部memcpy到固定的内存区域并使用它。通过使用ALLOC_HOST_PTR,您将避免这种情况。但这又取决于实现,你必须阅读制造商文档,看看它是否会为你提供固定内存。