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

opencl - use image object with local memory

我正在尝试使用 opencl 进行编程。

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

一些博客和网站,白皮书说 'image object is little bit faster that buffer because of cache'。

我正在尝试使用图像对象,原因是 'clamp',它将使内核代码更简单、更快(我的意见)

我的问题是“是否可以使用图像对象和本地内存,它是否更快(比使用具有本地内存的缓冲区对象)?”

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

据我所知,在这种情况下,我不能对本地内存使用 async_work_group_copy 指令。

所以我必须手动复制和同步本地内存。它会产生很多开销。

唯一真正的答案是 "it depends"。大多数实现在做 async_work_group_copy 时并没有真正的价值。当发生缓存命中时,图像读取的延迟可能略高于缓冲区读取,但在某些体系结构上,您可能会从中获得更好的缓存行为。钳位、地址计算和过滤实际上是由专用硬件执行的免费操作,您在使用缓冲区时必须转移到着色器代码中,这样可以减少读取延迟并可能增加吞吐量。

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

遗憾的是,这只是您必须在目标架构上进行试验的其中一项。