在Khronos文件中,' clCreateBuffer'据说
CL_MEM_COPY_HOST_PTR如果指定,则表示应用程序希望OpenCL实现为内存对象分配内存并从host_ptr引用的内存中复制数据。
" CL_MEM_COPY_HOST_PTR可与CL_MEM_ALLOC_HOST_PTR一起使用,以初始化使用主机可访问(例如PCIe)存储器分配的cl_mem对象的内容。 "
分配内存并在更新之前复制其内容的含义是什么?它与PCIe示例有什么关系?
答案 0 :(得分:1)
CL_MEM_ALLOC_HOST_PTR
是通常用于指示CL对象在主机内存中具有副本(或驻留)的标志。
通常称为固定内存,并允许非常快速的复制操作。
在某些具有共享内存模型的平台上,这表明内存在CPU和GPU之间共享。 (不需要任何IO额外操作)
但是,该标志分配的内存是一个特殊的内存区域,因此未初始化。这就是为什么你可以选择使用CL_MEM_COPY_HOST_PTR
表示你想用你在指针中传递的内容(host_ptr)来初始化缓冲区
cl_mem clCreateBuffer ( cl_context context,
cl_mem_flags flags,
size_t size,
void *host_ptr, //<- Here
cl_int *errcode_ret)
该标志相当于正常分配+ clEnqueueWriteBuffer()