Memory opencl-使用具有本地内存的图像对象

Memory opencl-使用具有本地内存的图像对象,memory,opencl,gpu,shared-memory,gpgpu,Memory,Opencl,Gpu,Shared Memory,Gpgpu,我正在尝试用opencl编程 内存对象有两种类型。 一个是缓冲区,另一个是图像 一些博客和网站,白皮书说“由于缓存,图像对象比缓冲区快一点” 我尝试使用图像对象,原因是“钳制”,它将使内核代码更简单、更快(我的观点) 我的问题是‘是否可以使用图像对象和本地内存?它是否比使用带有本地内存的缓冲区对象更快?’ 数据->图像对象->复制到本地内存->操作->写回其他图像对象 据我所知,在这种情况下,我不能对本地内存使用异步\u工作\u组\u复制指令 因此,我必须为本地内存手动复制和同步。这将造成很大的

我正在尝试用opencl编程

内存对象有两种类型。 一个是缓冲区,另一个是图像

一些博客和网站,白皮书说“由于缓存,图像对象比缓冲区快一点”

我尝试使用图像对象,原因是“钳制”,它将使内核代码更简单、更快(我的观点)

我的问题是‘是否可以使用图像对象和本地内存?它是否比使用带有本地内存的缓冲区对象更快?’

数据->图像对象->复制到本地内存->操作->写回其他图像对象

据我所知,在这种情况下,我不能对本地内存使用异步\u工作\u组\u复制指令


因此,我必须为本地内存手动复制和同步。这将造成很大的开销。

唯一真正的答案是“视情况而定”“。大多数实现在执行异步\u工作\u组\u复制时并没有真正的价值。当缓存命中时,映像读取的延迟可能略高于缓冲区读取,但在某些体系结构上,您可能会从中获得更好的缓存行为。箝位、地址计算和过滤是由专用硬件执行的有效自由操作,在使用缓冲区时,您必须转换为着色器代码,这样可以减少读取延迟并可能增加吞吐量

如果要从图像中获得巨大的缓存好处,本地内存可能会成为阻碍。写入、同步、读取、计算地址等的额外成本可能会让您付出代价


遗憾的是,这只是您必须在目标体系结构上进行试验的事情之一。

感谢您的回复,我唯一能做的就是“尝试几种方法”