CUDA:纹理内存入门到精通--纹理内存概要

导读

CUDA:纹理内存入门到精通–纹理内存概要
CUDA:纹理内存入门到精通–纹理参考
CUDA:纹理内存入门到精通–纹理对象

纹理内存

首先简单介绍一下什么是纹理内存。从硬件角度来说,纹理内存实际上是存储在全局内存上;唯一的区别是,当某一个变量绑定纹理内存后,在程序运行过程中会将部分信息存储在纹理缓存中,以减少线程块对全局内存的读取,进而提高程序的运行速度。
在《CUDA By Example》中的一个图片生动的描述了Texture Memory的运行模式。观看下图可以发现Thread0~Thread3访问了一个图片上相邻区域的像素块。在常规模式下,分别需要在每个线程中访问全局内存来获取对应得像素值。不难发现存在许多重复访问,那么纹理内存就是将这些重复访问合并,减少不必要的访问步骤。
这里写图片描述

纹理缓存

前边提到纹理内存的核心是利用缓存来减少对全局内存的访问,因此不难发现缓存是一种非常珍贵的资源;在CUDA中对其有一个专门的称呼:纹理缓存。在使用纹理内存时,知道纹理缓存有多大还是一件比较重要的事情。在查阅了一些CUDA的官方文档后,得到了以下两个表,放在下边以便再次查询。
这里写图片描述

纹理使用

纹理内存的使用一共有两种方法:纹理参考和纹理对象。从功能上来说两者不存在任何区别,但是在使用上两者还是有略微区别的:

  1. 目前所有的N卡都支持纹理参考,但是只有计算能力3.1以上的N卡才支持纹理对象;
  2. 纹理参考的属性必须在代码编译前已知,作为全局变量使用,是不可更改的,并且不能作为参数使用;纹理对象则可以根据自己的需要在代码中灵活使用,可以作为核函数的参数传入,使用更加灵活。

示例代码

关于纹理内存的使用可以参考CUDA性能测试,其中包括对纹理参考、纹理对象的使用方法和代码。当然也可以参考本系列后续博客。

参考

本博客参考资料来源如下:
http://cuda-programming.blogspot.com/2013/02/texture-memory-in-cuda-what-is-texture.html
http://blog.csdn.net/ai_vivi/article/details/42235787
http://blog.csdn.net/traceorigin/article/details/9213453
https://devtalk.nvidia.com/default/topic/489304/size-of-constant-cache-and-texture-cache/
https://devtalk.nvidia.com/default/topic/805057/cuda-programming-and-performance/cudabindtexture2d-showing-error-
http://blog.csdn.net/yh880/article/details/50715844
https://stackoverflow.com/questions/22083499/constant-cache-vs-texture-cache-for-broadcasting-behaviour-in-cuda
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications__technical-specifications-per-compute-capability
http://bbs.csdn.net/topics/390806590
http://bbs.csdn.net/topics/390818003

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值