OpenCL中的image2d_t和image2d_array_t有什么区别



OpenCL中的image2d_t和image2d_array_t数据类型之间有什么区别?我在说明书中找不到太多信息。

image2d_t是一个特定格式和大小的平面2D图像。如果cl_khr_mipmap_image扩展可用,它也可能包含mipmap级别(https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/cl_khr_mipmap_image.html)。

CCD_ 3是全部具有相同大小和类型的图像的阵列。看看https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/cl_image_desc.html了解如何创建这样的图像阵列。从此页面:

请注意,从image_array_size=1的内核读取和写入2D图像阵列的性能可能低于2D图像。

因此您应该只在需要时使用图像数组。

请参阅https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/read_imagef2d.html了解如何从内核访问image2d_timage2d_array_t。对于图像阵列,所需图像的索引将位于z纹理坐标中。对于image2d_timage2d_array_t,mipmap级别被指定为read_image()lod参数。

如果您需要将可变数量的图像传递给内核(即在运行时决定),则图像阵列非常有用,因为在内核中,您可以查询image2d_array_tget_image_array_size()中有多少图像,例如,您希望将图像阵列中的所有图像平均在一起。

它们对于从内核中索引图像也很有用,例如,根据内核中计算的局部图像统计信息选择边缘锐化掩模(存储在图像阵列中)。

在硬件方面,image2d_array_t通常比image3d_t更快,并且得到更广泛的支持。然而,image2d_array_t不能(自动)在阵列图像之间对进行采样,而image3d_t可以在分数z位置进行采样。

最新更新