CL_MEM_USE_HOST_PTR与CL_MEM_COPY_HOST_PTR对比CL_MEM_ALLOC_HOST_PTR

use*_*236 9 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-是否所有这些固定内存分配?

小智 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,您将避免这种情况.但这又取决于实现,你必须阅读制造商文档,了解这是否会为您提供固定内存.