7.2_纹理内存简介
7.2 纹理内存简介
在读了本章开头的介绍后,你其实已经知道了纹理内存的秘密:它只不过是在CUDA C程序中可以使用的另一种只读内存。熟悉图形硬件工作原理的读者对纹理内存不会感到陌生,但本章要介绍的是纹理内存同样可以用于通用计算。虽然NVIDIA为OpenGL和 DirectX等的渲染流水线都设计了纹理单元,但纹理内存具备的一些属性使其在计算中变得非常有用。
与常量内存类似的是,纹理内存同样缓存在芯片上,因此在某些情况中,它能够减少对内存的请求并提供更高效的内存带宽。纹理缓存是专门为那些在内存访问模式中存在大量空间局部性(Spatial Locality)的图形应用程序而设计的。在某个计算应用程序中,这意味着一个线程读取的位置可能与邻近线程读取的位置“非常接近”,如图7.1所示。

图7.1 将线程映射到二维内存区域
从数学角度来看,图中的四个地址并非连续的,在一般的CPU缓存模式中,这些地址将不会缓存。但由于GPU纹理缓存是专门为了加速这种访问模式而设计的,因此如果在这种情况中使用纹理内存而不是全局内存,那么将会获得性能提升。事实上,这种访问在通用计算中并非罕见,我们稍后将会看到。