OpenCL中的缓冲区对象和图像缓冲区对象

时间:2012-03-28 08:34:53

标签: opencl

opencl中的Buffer对象和图像缓冲区对象有什么区别?很明显,图像缓冲区速度更快但程度如何?他们必须在哪里使用?

2 个答案:

答案 0 :(得分:16)

OpenCL缓冲区是全局内存中的1D或2D或3D阵列。它是一个抽象的对象 可以通过指针解决。缓冲区是只读或Write_only或读写。  图像缓冲区表示GPU纹理内存。它代表一组像素 可以通过指定像素x,y,z坐标的函数进行访问。 GPU上没有指向图像像素的指针访问。

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

OpenCL Buffers用于通用数组,特别是用于读写的数组, 或双精度。 OpenCL Image Buffers用于图像处理或其他信号处理算法 其中输入图像/信号可以被视为只读。

答案 1 :(得分:4)

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