CUDA学习(十)使用texture 进行图像处理

首先texture在硬件层次上是属于一块存储器,通过绑定操作,可以用纹理操作根据坐标去获取数据,然后进行相应的操作

但是我现在对于texture的理解是,它可以较快的读取数据,如果你需要进行滤波,使用texture是最合适的,但是如果你不需要滤波,我没想到它的使用与global memory相比有什么好处,好想找人讨论啊,感觉自己理解不够

代码层次上对于texture存储器的使用,主要有以下几个流程:

  1. 在所有函数定义前定义texture 参考
  2. 定义像元类型
  3. 分配texture存储容量
  4. 进行纹理绑定
  5. 在kernel函数中通过坐标获取texture存储器的数据,进行操作

首先我们看看定义texture参考

texture<Type,Dim,ReadMode> texRef;//声明纹理类型
/*
Type:返回值类型,这里是指的在kernel函数中使用纹理拾取函数对texture进行读取时返回的值,但是这个也跟ReadMode有关
Dim:指定纹理的维度,可选的值有1,2,3,这个需要与纹理操作函数的坐标对应
ReadMode:指定读取纹理模式,
    ReadMode=cudaReadModeNormalizedFloat;//表示最终返回的值为float型,会映射到[0.0,1.0]
    ReadMode=cudaReadModeElementType;//最终返回值不做任何处理
*/

//这也就是为什么写ref和拾取需要配合的原因
//纹理参考的属性

我们再看看texture的定义,可以看到它时一个结构体,不过结构体里面所有的成员变量都有默认值,但是又可以发现template在模板实例化的时候就确定了返回值类型,textTpye,以及ReadMode,其它的都是可变的,具体细节在写的时候注意下吧

template<class T, int texType = cudaTextureType1D, enum cudaTextureReadMode mode = cudaReadModeElementType>
struct __device_builtin_texture_type__ texture : public textureReference
{
#if !defined(__CUDACC_RTC__)
  __host__ texture(int                         norm  = 0,
                   enum cudaTextureFilterMode  fMode = cudaFilterModePoint,
                   enum cudaTextureAddressMode aMode = cudaAddressModeClamp)
  {
    normalized     = norm;
    filterMode     = fMode;
    addressMode[0] = aMode;
    addressMode[1] = aMode;
    addressMode[2] = aMode;
    channelDesc    = cudaCreateChannelDesc<T>();
    sRGB           = 0;
  }

  __host__ texture(int                          norm,
                   enum cudaTextureFilterMode   fMode,
                   enum cudaTextureAddressMode  aMode,
                   struct cudaChannelFormatDesc desc)
  {
    normalized     = norm;
    filterMode     = fMode;
    addressMode[0] =
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值