1

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

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

  • 将我的无符号短数据转换为 [0;1] 范围内的16 位浮点数;(如何?)
  • malloc 3D 数组宽度cudaCreateChannelDescHalf()通道描述符
  • 将无符号短数据的纹理绑定到该数组
  • 将其发送到 GPU 内存,放入 3D 数组;
  • 在内核中 - 使用tex3D()函数获取值

请看下面的答案...

4

1 回答 1

3

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

我认为问题出在纹理声明上:

texture<unsigned short, cudaTextureType3D, cudaReadModeNormalizedFloat> tex;

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

于 2012-10-12T10:00:56.103 回答