OpenCL中CL_MEM_USE_HOST_PTR和CL_MEM_COPY_HOST_PTR的基准

Dam*_*oon 3 opencl

我在主机上有一个向量,我想将它减半并发送到设备.做一个基准测试表明它CL_MEM_ALLOC_HOST_PTRCL_MEM_USE_HOST_PTR速度更快,速度更快CL_MEM_COPY_HOST_PTR.此外,设备上的内存分析不会显示设备上创建的缓冲区大小有任何差异.这与Khronos-clCreateBuffer上提到的标志的文档不同.有谁知道发生了什么?

hom*_*jam 8

Pompei 2的回答是不正确的.规范不保证分配内存的位置,而只分配它的分配方式.CL_MEM_ALLOC_HOST_PTR使clCreateBuffer为您分配主机端内存.然后,您可以使用clEnqueueMapBuffer将其映射到主机指针.CL_MEM_USE_HOST_PTR将使运行时将您提供的数据提取到OpenCL缓冲区中.

通过使用CL_MEM_ALLOC_HOST_PTR实现固定内存:运行时能够尽可能地分配内存.

所有这些性能都取决于实现.更仔细阅读3.1.1节将表明,在电话中的一个(没有CL_MEM标志)NVIDIA能够预先分配的设备侧缓冲,而另一只调用拿到固定的数据映射到主机指针准备好写入设备.