clEnqueueMapBuffer和clEnqueueWriteBuffer之间有什么区别

Dav*_*ing 3 buffer opencl

他们可以将数据从主机传输到设备吗?那么,有什么区别?一个人需要创建缓冲区吗?谢谢!

关于khronos网站的解释:

clEnqueueMapBuffer:

将命令排队以将缓冲区给定的缓冲区对象的区域映射到主机地址空间,并返回指向此映射区域的指针.

clEnqueueWriteBuffer

将命令排入队列以从主机内存写入缓冲区对象.

Rom*_*yan 6

编写缓冲区意味着您有2个内存对象 - 一个在主机上,由malloc等分配,另一个在Device上,通过OpenCL API分配.

映射意味着您有一个由OpenCL API分配的对象,并且您正在将其地址转换为主机地址空间.

如果您的设备具有来自RAM的内存,则最好使用映射 - 地址转换比复制花费的时间更少.

如果您的设备具有单独的内存,您将看不到速度差异 - 将隐式复制数据.

无论如何,映射允许您摆脱内存重复.