CUDA纹理和夹紧

时间:2011-04-22 15:59:12

标签: c++ arrays cuda textures

有没有办法将范围纹理地址限制到某个值?在我的情况下,我希望将它们设置为一个简单的零,但我需要的地址模式似乎不存在。

感谢。

编辑:知道cudaAddressModeBorder设置的作用吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

我们还可以钳制边界并捕获它(使内核失败)使用表面存储器时的默认值。

问候!