OpenCL中的image2d_t和image2d_数组_t有什么区别?

OpenCL中的image2d_t和image2d_数组_t有什么区别?,opencl,Opencl,OpenCL中image2d_t和image2d_数组_t数据类型之间的区别是什么? 我在规范中找不到太多信息。image2d\u t是一个特定格式和大小的平面二维图像。如果cl\u khr\u mipmap\u图像扩展可用,则它还可能包含mipmap级别() image2d\u array\t是一组大小和类型都相同的图像。请看一看如何创建这样的图像阵列。从本页: 请注意,从image_array_size=1的内核读取和写入二维图像数组的性能可能低于二维图像 因此,您应该仅在需要时使用图像阵列

OpenCL中image2d_t和image2d_数组_t数据类型之间的区别是什么?
我在规范中找不到太多信息。

image2d\u t
是一个特定格式和大小的平面二维图像。如果
cl\u khr\u mipmap\u图像
扩展可用,则它还可能包含mipmap级别()

image2d\u array\t
是一组大小和类型都相同的图像。请看一看如何创建这样的图像阵列。从本页:

请注意,从image_array_size=1的内核读取和写入二维图像数组的性能可能低于二维图像

因此,您应该仅在需要时使用图像阵列

有关如何从内核访问
image2d\u t
image2d\u数组\u t
,请参阅。对于图像阵列,所需图像的索引将位于
z
纹理坐标中。对于
image2d\u t
image2d\u array\u t
而言,mipmap级别被指定为
lod
参数,用于
read\u image()

如果您需要将可变数量的图像传递给内核(即在运行时决定),那么图像数组非常有用,因为在内核中,您可以使用
get\u Image\u array\u size()
查询
image2d\u array\u t
中有多少图像,例如,您希望将图像数组中的所有图像平均起来

它们还可用于索引内核中的图像,例如,根据内核中计算的局部图像统计信息选择边缘锐化遮罩(存储在图像数组中)


在硬件方面,
image2d\u阵列\u t
通常比
image3d\u t
更快,而且支持范围更广。但是,
image2d\u array\u t
无法(自动)在阵列图像之间进行采样,而
image3d\u t
可以在分数
z
位置进行采样。

2d\u array\t必须是单独的图像,而3d必须在硬件上进行更优化,以过滤图像间像素,从而单独计算图像,数组可能更好,如果将它们一起计算,3d可能更好。但我没有尝试这些,只是一个假设。