CUDA纹理和夹紧

CUDA textures and clamping

本文关键字:纹理 CUDA      更新时间:2023-10-16

是否有办法将范围外的纹理地址箝位到某个值?在我的例子中,我希望它们被设置为一个简单的0,但是我需要的地址模式似乎不存在。

谢谢。

编辑:知道cudaAddressModeBorder设置是什么吗?

我不认为有一种方法来指定钳位,但你可以做明显的,并在边缘周围添加一个1像素的黑色(零)边框,并将你的寻址偏移1。它应该不会有太多的数据,它会让你免费夹紧。

如果你有一个最大尺寸的2D纹理(对于CUDA 2。x是64k x 64k),每像素16字节(最坏的情况),那么你只会看到4 MB的额外数据用于1像素边界,对于PCIe x16卡将需要大约500微秒的时间复制到卡上——即使在最坏的情况下也几乎没有什么。

当使用Surface函数访问纹理时,可以将边界模式设置为返回零。我现在不能测试它,因为你需要一个计算能力2.0+的设备,但你可以查看NVIDIA CUDA C编程指南(版本3.2)中的参考资料,章节B.9 p.114。

我们还可以夹紧边界并捕获它(使内核失败),这是使用表面内存时的默认值。

问候!