CUDA:纹理内存
纹理内存:
与常量内存类似,纹理内存是另一种形式的只读内存,并且同样缓存在芯片上。因此某些情况下能够减少对内存的请求并提供高效的内存带宽。纹理内存是专门为那些在内存访问模式中存在大量空间局部性的图形应用程序设计的。
首先,需要将输入的数据声明为texture类型的引用:
texture<float> texIn;
在为缓冲区分配了GPU内存后,需要通过cudaBindTexture()将这些变量绑定到内存缓冲区。这相当于告诉CUDA:
(1)我们希望将制定的缓冲区作为纹理来使用。
(2)我们希望将纹理引用作为纹理的“名字”
cudaMalloc((void**)&data.dev_inSrc, imageSize);
cudaBindTexture(NULL, texIn, data.dev_inSrc, imageSize);
当读取核函数中的纹理时,需要通过特殊的函数来告诉GPU将读取请求转发到纹理内存而不是标准的全局内存。因此,当读取内存时不再使用方括号从缓冲区中读取,而是改为使用tex1Dfetch().
纹理引用必须声明为文件作用域内的全局变量。tex1Dfetch是一个编译器内置函数,编译器需要在编译的时候知道tex1Dfetch()应该对哪些纹理采样。
tex1Dfetch(texIn, offset);
清除纹理绑定:
cudaUnbindTexTure(texIn);
二维纹理内存:
声明:
texture<float,2> texConstSrc;
读取:
tex2D(texConstSrc, x, y);
绑定:
cudaChannelFormatDesc desc = cudaCreateChannelDesc<float>();
cudaBindTexture2D(NULL, textConstSrc, data.dev_constSrc, desc, DIM, DIM, sizeof(float)*DIM) //纹理的维数(DIM*DIM),通道描述符desc
解绑:
cudaUnbindTexture(texConstSrc);
一维纹理和二维纹理在性能上没有差异。
CUDA:纹理内存的更多相关文章
- cuda纹理内存的使用
		
CUDA纹理内存的访问速度比全局内存要快,因此处理图像数据时,使用纹理内存是一个提升性能的好方法. 贴一段自己写的简单的实现两幅图像加权和的代码,使用纹理内存实现. 输入:两幅图 lena, moon ...
 - CUDA 纹理内存
		
原文链接 1.概述 纹理存储器中的数据以一维.二维或者三维数组的形式存储在显存中,可以通过缓存加速访问,并且可以声明大小比常数存储器要大的多. 在kernel中访问纹理存储器的操作称为纹理拾取(tex ...
 - CUDA一维纹理内存
		
纹理一词来源于GPU图形世界,GPU通用并行计算"盗用"了纹理一词,定义了一个纹理内存的概念.纹理内存缓存在 设备上,在某些情况下能减少对内存的请求并降低内存带宽的使用,是专门为那 ...
 - 《GPU高性能编程CUDA实战》第七章 纹理内存
		
▶ 本章介绍了纹理内存的使用,并给出了热传导的两个个例子.分别使用了一维和二维纹理单元. ● 热传导(使用一维纹理) #include <stdio.h> #include "c ...
 - CUDA中多维数组以及多维纹理内存的使用
		
纹理存储器(texture memory)是一种只读存储器,由GPU用于纹理渲染的图形专用单元发展而来,因此也提供了一些特殊功能.纹理存储器中的数据位于显存,但可以通过纹理缓存加速读取.在纹理存储器中 ...
 - CUDA二维纹理内存+OpenCV图像滤波
		
CUDA和OpenCV混合编程,使用CUDA的纹理内存,实现图像的二值化以及滤波功能. #include <cuda_runtime.h> #include <highgui/hig ...
 - 基于纹理内存的CUDA热传导模拟
		
原文链接 项目中有三个,第一个是全局内存,其余两个分别是基于1d和2d纹理内存.项目打包下载. 纹理内存是只读内存,与常量内存相同的是,纹理内存也缓存在芯片中,因此某些情况下,它能减少对内存的请求并提 ...
 - CUDA纹理绑定
		
纹理绑定的一般步骤: size_t fea_pitch; texture<unsigned char, 2> features2D; cudaMallocPitch((void**)(&a ...
 - CUDA零内存拷贝 疑问考证
		
今天思考了一下CUDA零内存拷贝的问题,感觉在即将设计的程序中会派上用场,于是就查了一下相关信息. 以下是一些有帮助的链接: cuda中的零拷贝用法--针对二维指针 cuda中的零拷贝用法--针对一维 ...
 
随机推荐
- Cygwin下vi和vim方向键和Backspace不好用的问题(转)
			
执行p4 client时vi打开文本,编辑起来恼火,于是找到了这个: 默认的vi(vim)没有配置文件,因此导致了方向键出现ABCD,以及Backspace只会移动光标,字符不消失的问题.cygwin ...
 - Android Material Design系列之主题样式介绍说明
			
今天这篇文章应该算是Material Design系列的补充篇,因为这篇文章本来应该放到前面讲的,因为讲的是主题嘛,对于一些状态和颜色的介绍,因为我们一新建一个项目时,系统自带了三个属性的颜色,现在就 ...
 - php正则表达式取子字符串及替换
			
最近在学习如何用php编写cms,想把文章中的第一个图片提取出来当做缩略图显示到前面,想到的方法就是把文章内容作为一个大字符串,然后用正则表达式找出匹配出第一次出现<img src=" ...
 - MyEclipse 中自定义日期格式
			
从数据库中读出Data数据: 而想实现的是这样: 解决办法: 1. 在这个类里添加自定义的变量birthf: public abstract class AbstractUsers implement ...
 - 【GLSL教程】(七)逐像素的光照 【转】
			
http://blog.csdn.net/racehorse/article/details/6662540 逐像素的方向光(Directional Light per Pixel) 这一节将把前面的 ...
 - 手机APP脚本录制(LoadRunner 12)
			
最近因项目需要,研究了下手机APP脚本录制方法,有需要的童鞋可参考使用! 方法1: 在手机网络中设置网络代理,使用LR12选择Mobile Application – HTTP/HTML协议中代理录制 ...
 - JAVA Eclipse的Android的进程和生命周期是什么
			
安卓程序的生命周期是不受自己控制的,安卓的程序根据不同的重要性做了一些区分,最重要的进程仅仅在安卓已经崩溃或者卡死的情况下才会终止前台进程. Activity就是表现层的界面,它有三种常见的状态, ...
 - java8新特性学习笔记(二) 使用流(各种API)
			
筛选和切片 用谓词筛选,筛选出各个不相同的元素,忽略流中的头几个元素,或将流截断至指定长度 用谓词筛选 Stream接口支持filter方法,该操作接受一个谓词(返回一个boolean的函数) 作为参 ...
 - javascript if(条件)------------条件中可以使用的值
			
1.布尔变量true/false2.数字非0,非NaN/ ( 或NaN) NaN--------Not a Number 3.对象非null/(null或undefined) 4.字符串非空串(&qu ...
 - WinForm搭载ScintillaNET时文本由于发生偏移被隐藏解决方案
			
项目用ScintillaNet搭载到WinForm以满足文本编辑的需求,在用FindReplace.Scintilla.Text=“显示内容”输出文本内容的时候会碰到文本被WinForm边框隐藏的情况 ...