5.5_纹理内存

5.5 纹理内存

在CUDA中,纹理内存的实现包含两个方面:CUDA数组和纹理引用/表面引用 [1]。前者包含物理内存分配,后者包含一个视图,使用这个视图可以读写CUDA数组。CUDA数组只是一个使用存储配置的无类型“位集合”,其内存结构为1D、2D和3D访问做了特别优化。一个纹理引用包含有CUDA数组怎样编址和数组的内容怎样被解释方面的信息。

当使用纹理引用来从CUDA数组读取内容,硬件使用独立的,只读缓存来解析内存引用。当内核执行时,纹理缓存不保持与其他内存子系统的一致性,所以千万不要使用纹理引用对将在内核上使用的内存进行别名操作(这块缓存在内核启动之间是无效的)。

在SM3.5硬件中,通过纹理的读操作可以通过开发者使用constrestricted关键词显式请求。关键字restricted只会做出刚刚所述的“不进行别名操作”的保证,这样该内存不会被内核以任何方式引用。当使用表面引用读写CUDA数组,内存数据传输与全局加载与存储使用相同的内存结构。第10章包含了在CUDA中怎样分配和使用纹理操作的细节。

[1] 表面引用只能在SM2.x和之后的硬件上使用。