cuda - 理解cuda中纹理的线性过滤

标签 cuda

根据CUDA编程指南,纹理获取返回的值为

tex(x) = (1-a)T[i] + aT[i+1] for a one-dimensional texture

where i = floor(Xb), a = frac(Xb), Xb=x-0.5

假设我们有一个只有两个纹理的一维纹理。例如:

T[0] = 0.2, T[1] = 1.5

假设我们想要获取 1 处的纹理,我认为应该返回 T[1],即 1.5。

但是,如果遵循编程指南中给出的规则,返回值将是:

Xb = 1 - 0.5 = 0.5
a = 0.5
i = 0
return value = 0.5*T[0] + 0.5*T[1] = 0.85

这对我来说没有任何意义。有人可以解释为什么 CUDA 会以这种方式完成线性过滤吗?谢谢

最佳答案

CUDA 中的线性过滤算法假设纹素值位于插值体积的质心(如果您愿意,则以体素为中心)。在您的一维过滤示例中,输入数据隐式视为

T[0]=(0.5, 0.2) T[1]=(1.5, 1.5)

因此,您的示例要求 Tex(1),它是两个纹素值之间的中点,即。

0.5*0.2 + 0.5*1.5 = 0.85

要返回 T[1],您需要 Tex(1.5),这是一般规则 - 如果您想将纹理数据视为位于体素顶点,请将 0.5 添加到坐标,而不是体素中心。

关于cuda - 理解cuda中纹理的线性过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674185/

相关文章:

cudaEventRecord() 在 Visual Studio CPU 代码上计时不正确

algorithm - CUDA中基于索引的流压缩和转换

caching - CUDA - 多处理器、Warp 大小和每个 block 的最大线程数 : What is the exact relationship?

性能问题 : Single CPU core vs Single CUDA core

gcc - CUDA - 无法编译 .cu 文件,因为 "gcc: error trying to exec ' cc1plus' : execvp"error

windows - 在 Windows 中安装 CUDA 8 和 CUDA 9

cuda - 在 CUDA 中转置矩阵的最有效方法是什么?

cuda - 使用 cuSPARSE 将密集矩阵转换为稀疏 CSR 格式

c++ - #ifdef/#ifndef 和#endif

CUDA 设备堆栈和同步; SSY指令