zoukankan      html  css  js  c++  java
  • 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);

      一维纹理和二维纹理在性能上没有差异。

  • 相关阅读:
    Ext文本框添加清除图标,
    gird鼠标移动显示tip
    shapefile文件导入mysql数据库
    百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
    POSTGIS修复错误数据
    地图瓦片切片方案
    mapbox.gl源码解析——基本架构与数据渲染流程
    高斯克吕格与地理坐标相互转换算法(JS版本)
    mysql空间扩展对比postgis
    从maven central下载javax.media.jai_core:1.1.3时出错
  • 原文地址:https://www.cnblogs.com/programmer-wfq/p/6734590.html
Copyright © 2011-2022 走看看