VS2017 CUDA编程学习10:纹理内存


VS2017 CUDA编程学习1:CUDA编程两变量加法运算
VS2017 CUDA编程学习2:在GPU上执行线程
VS2017 CUDA编程学习3:CUDA获取设备上属性信息
VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现
VS2017 CUDA编程学习5:CUDA并行执行-线程
VS2017 CUDA编程学习6: GPU存储器架构
VS2017 CUDA编程学习7:线程同步-共享内存
VS2017 CUDA编程学习8:线程同步-原子操作
VS2017 CUDA编程学习9:常量内存


前言

这里继续CUDA编程的学习,今天学习了设备纹理内存的使用,这里分享给大家!


1. 纹理内存的理解

纹理内存,是设备中一种只读存储器,在设备内存中也有对应的缓冲器Cache来加速IO操作。纹理内存对于程序中有空间邻近性访问的数据很高效。这里的空间邻近性是指每个线程的读取位置和其他线程的读取位置邻近,这在图像处理中非常有用,因为图像处理中经常需要进行邻域比较,比如4邻域和8邻域。

当然全局内存也可以进行这种有空间邻近性特性数据的存储与访问,但是速度上要慢很多,需要进行大量的显存读取操作。但是纹理内存则只需要从显存读取一次就可以(不理解这种说法,书中这么说的),纹理内存支持2维和3维纹理读取操作。


2. C++ CUDA实现常量内存使用

这里以一个简单的例子:从纹理内存中读取数据并赋值。

纹理内存需要和“纹理引用”与CUDA数组配套使用来实现。
纹理引用通过 t e x t u r e < p a r a m 1 , p a r a m 2 , p a r a m 3 > texture<param1, param2, param3> texture<param1,param2,param3>类型变量来定义,param1表示纹理元素的类型,param2表示纹理引用的类型(1-表示1D, 2-表示2D, 3-表示3D),param3则表示读取模式,这是一个可选参数,说明是否要执行自动类型转换。

注意,纹理引用变量要确保被定义为全局静态变量(个人理解,这样才能在内核函数中使用),同时还要确保这个变量不能作为参数传递给任何其他函数。

下面的例子中通过纹理引用读取线程ID作为索引位置的数据,然后复制到d_out指针指向全局内存中。

在main函数中则使用CUDA数组 c u d a A r r a y cudaArray cudaAr

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值