CUDA 学习(十四)、纹理内存

来源:互联网 发布:mysql mvcc 乐观锁 编辑:程序博客网 时间:2024/06/05 00:40

一、概述

        使用纹理内存主要基于以下两个目的:(1)计算能力为1.x 与3.x 硬件上的缓存机制;(2)基于硬件的内存读取操作。


二、纹理缓存

       由于在计算能力为1.x 的硬件上根本没有高速缓存,因此,每个SM上的 6-8KB 的纹理内存为此设备提供了唯一真正缓存数据的方法。然而,随着费米架构的硬件出现,一级缓存最大可达到48KB,共享二级缓存最大可达到768KB,使得纹理内存这项属性基本被淘汰。但,费米架构的设备依然保留着纹理内存以保证对旧式硬件上的代码兼容。

      纹理缓存通常用来做局部优化,即它希望数据提供给连续的线程进行操作。这与费米架构设备上一级缓存的缓存机制基本相同。然而,在开普勒架构的设备中,纹理内存使用了一种特殊的计算方式,使得对其编程不再那么复杂。


三、基于硬件的内存获取操作

      纹理内存最有用的一个特性就是访问存储单元式,其允许GPU某些硬件方面的自动实现。一个比较有用的方面就是基于硬件的低分辨率线性插值。对于二维数组和三维数组,分别可以支持硬件级双线性插值与三线性插值。

      纹理的另一个比较实用的特性是其可以根据数组索引自动处理边界条件。我们可以在数组边界按照环绕方式或夹取方式来对纹理数组进行处理。这一点非常有用,因为通常情况下它不需要通过嵌入特殊的边缘处理代码就可以对所有元素进行处理。

      对于GPU内核而言,纹理内存是只读内存,并且只有通过特殊的纹理API (例如,texiDfetch()等)与纹理数组边界才能对其访问。







0 0