2012-03-28 195 views

回答

14

OpenCL缓冲区是全局内存中的一维或二维或三维数组。它的抽象对象 可以通过指针寻址。缓冲区是只读或只写或读写的。 图像缓冲区表示GPU纹理内存。它表示可以通过函数指定像素x,y,z坐标来访问 的像素阵列。 GPU上没有指针访问图像像素。

硬件以不同的方式处理这两种类型的缓冲区。 OpenCL缓冲区可以在 主机RAM或GPU RAM中并在两者之间传输。 OpenCL Image Buffer具有类似于OpenCL Buffer的特征 。但区别在于Image Buffer是只读或只写。对于只读图像缓冲区,GPU可以在每个计算单元中缓存图像像素的副本(= 32或64 ALU)。典型的缓存大小是8K(字节或像素?)。 此外,由于无法通过GPU上的指针访问图像像素。他们从 x,y,z坐标到物理地址的映射可以用几种方式进行映射。一种方法是Z排序。这使得像素在二维中集中,使得x,y方向上的相邻像素线性存储。这有助于加速访问 图像过滤器中的相邻像素。

OpenCL缓冲区用于常规数组,尤其是用于读写, 或双精度的数组。 OpenCL Image Buffers用于图像处理或其他信号处理算法 ,其中输入图像/信号可以视为只读。

+0

非常感谢您的回复。学到了很多东西,但也想知道哪一个更快,多少百分比 – Megharaj 2012-03-29 05:10:43

+0

哪个更快,什么百分比没有通用答案。这取决于你的代码如何访问内存以及你在哪个设备上运行。 – 2012-04-01 02:47:26

3

仅供参考,从OpenCL 2.x开始,图像对象可以读写。