CUDA中的半精度浮点纹理过滤

时间:2012-10-12 09:11:07

标签: cuda filtering textures precision

使用 16位float 纹理类型时,我可以利用CUDA纹理过滤吗?我已经在CUDA 3D Array中使用 32位浮点纹理进行了测试,并且过滤工作正常。 CUDA不支持无符号短纹理插值,这对我来说非常完美,因为它占用的内存空间更少。

我正在考虑这个解决方案 - 如果我错了,请纠正我:

  • 无符号短数据转换为范围[0; 1]中的 16位浮点数; (工作原理)
  • malloc 3D数组宽度cudaCreateChannelDescHalf()频道描述符
  • unsigned short 数据的纹理绑定到该数组
  • 将其发送到GPU内存,进入3D阵列;
  • 内核中的
  • - 使用tex3D()函数获取值

<击> 见下面的答案......

1 个答案:

答案 0 :(得分:2)

我再次回答我自己的问题。下次我会在发布之前尝试挖掘更多...

我认为问题在于纹理声明:

texture<unsigned short, cudaTextureType3D, cudaReadModeNormalizedFloat> tex;

如我所见,仅当返回的值为 float 类型时才支持过滤,如上所述,可以使用cudaReadModeNormalizedFloat强制过滤。然后tex3D返回[0; 1]插值浮点值。