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_t
和image2d_array_t
。对于图像阵列,所需图像的索引将位于z
纹理坐标中。对于image2d_t
和image2d_array_t
,mipmap级别被指定为read_image()
的lod
参数。
如果您需要将可变数量的图像传递给内核(即在运行时决定),则图像阵列非常有用,因为在内核中,您可以查询image2d_array_t
和get_image_array_size()
中有多少图像,例如,您希望将图像阵列中的所有图像平均在一起。
它们对于从内核中索引图像也很有用,例如,根据内核中计算的局部图像统计信息选择边缘锐化掩模(存储在图像阵列中)。
在硬件方面,image2d_array_t
通常比image3d_t
更快,并且得到更广泛的支持。然而,image2d_array_t
不能(自动)在阵列图像之间对进行采样,而image3d_t
可以在分数z
位置进行采样。