1

在 OpenCL 中,您需要定义一个在进行图像读取 (read_image*) 时反对的采样器,并且在该采样器中您指定如何限制地址(例如,您可以执行 CLK_ADDRESS_CLAMP_TO_EDGE)。但是没有用于图像写入的采样器 (write_image*)。所以没有指定钳位。那么退出图像边界的像素地址应该发生什么?这只是没有指定并留给供应商吗?在网上看,似乎大多数具有 write_images 的 OpenCL 代码要么不使用任何钳位,要么人们使用自己的钳位函数。我不明白为什么没有为写入指定钳位,而是为读取指定了钳位。我在这里错过了什么吗?我已经用谷歌搜索并仔细阅读了规范,没有任何解释如何限制写入。

4

2 回答 2

3

从 OpenCL 1.2 规范 6.12.14.4:

对于使用上述描述中未指定的 image_channel_data_type 值或使用不在范围 (0 ... 图像宽度 – 1, 0 ...图像高度 – 1) 分别是未定义的。

没有写钳位,它留给用户内核代码来确保坐标有效。

于 2013-01-17T03:02:02.097 回答
3

不仅没有图像写入限制,在某些设备(例如,较旧的 NVIDIA 硬件)上,写入图像边界之外的内容通常以难以调试的方式崩溃(因为这是 GPU 崩溃)。避免这样做。

于 2013-01-19T19:40:21.180 回答