浅析OpenCL memory(2)——memory object creation flag 以及 data transfer mode

本文探讨OpenCL中memory object的创建标志及其数据传输方式,包括直接读写与映射。详细介绍了映射过程的三个步骤,并分析了不同情况下数据传输的开销。特别讨论了zero copy buffer的实现,如CL_MEM_USE_PERSISTENT_MEM_AMD和CL_MEM_ALLOC_HOST_PTR,以及它们在dGPU和APU上的应用,强调了在选择内存标志时应考虑的性能和访问模式。
摘要由CSDN通过智能技术生成

       

         memory object 的数据传输有两种方式,显示的读写以及数据映射(Map)。

        读写buffer/Image由CL函数 clEnqueueWrite/ReadBuffer和clEnqueueWrite/ReadImage实现。

        映射buffer/Image主要由三步骤:

       (1).映射buffer/Image到主机端内存指针host_ptr,映射可以使用读、写方式,表示需要读取还是修改buffer/Image的内容。

       (2).对主机端内存的读/写(产生实际的数据传输)

       (3).解除映射关系,必要时更新buffer/Image内容

 

       对dGPU来说,数据传输经过PCI-E实现;对于APU来说,数据传输经过Radeon Memory Bus.对于CPU访问dGPU显存,以及APU中CPU、GPU内存的互访都要经过PCI-E或者Radeon总线。

 

       当读取buffer(非zero copy)内容时候,映射步骤需要将Buffer的有效内容复制到主机端内存,并提供有效的指针host_ptr,这个过程需要数据传输代价;解除映射时候,开销很小。

       当更新buffer(非zero copy)内容时候,映射步骤需要提供有效的指针host_ptr,这个过程开销很小,无需数据传输;解除映射时候,需要更新buffer,这需要有数据传输的开销。

       而对于zero copy Buffer来说,解除映射与映射的开销都很小。所谓的zero copy是指buffer始终驻留在设备端或者主机端,在映射和解映射时候不发生数据传输(copy)的特性。表现在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值