opencl中的Buffer对象和图像buffer对象有什么区别?很明显,图像缓冲区更快,但在多大程度上呢?在哪些地方必须使用它们?
发布于 2012-03-28 21:29:57
OpenCL缓冲区是全局内存中的一维、二维或三维数组。它是一个可以通过指针寻址的抽象对象。缓冲区可以是只读的,也可以是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缓冲区用于一般数组,尤其是读写或双精度的数组。OpenCL图像缓冲区用于图像处理或其他信号处理算法,其中输入图像/信号可以被视为只读。
https://stackoverflow.com/questions/9903855
复制相似问题