我试图用opencl编程。
有两种类型的内存对象。 一个是缓冲区,另一个是图像。
一些博客和网站,白皮书说,由于缓存,图像对象的缓冲速度要快一点。我试图使用图像对象,其原因是“钳制”,它会使内核代码更简单,更快(我的意见)
我的问题是'是否可以使用图像对象和本地内存,它是否比使用具有本地内存的缓冲区对象更快?"
Data-用>图像对象 - >复制到本地内存 - >操作 - >写回其他图像对象。
据我所知,在这种情况下,我不能对本地内存使用async_work_group_copy指令。
所以我必须手动复制和同步本地内存。它会增加很多开销。
答案 0 :(得分:0)
唯一真正的答案是“它取决于”。在执行async_work_group_copy时,大多数实现并没有真正的价值。当存在缓存命中时,映像读取的延迟可能比缓冲区读取略高,但在某些体系结构上,您可能会从它们获得更好的缓存行为。钳位,地址计算和过滤是专用硬件执行的有效免费操作,在使用缓冲区时必须转换为着色器代码,这样可以减少读取延迟并提高吞吐量。
如果您希望从图像中获得较大的缓存优势,本地内存可能会受到影响。写入它,同步,读取,计算地址等的额外费用可能会花费你。
可悲的是,这只是您必须在目标架构上进行试验的其中一项。