GPU编程和流式多处理器(六)
5. 纹理和表面
读取和写入纹理和表面的指令,所引用的隐式状态,比其他指令要多得多。header中包含诸如基地址,尺寸,格式和纹理内容的解释之类的参数,该header是一种中间数据结构,其软件抽象称为纹理参考或表面参考。当开发人员操纵纹理或表面引用时,CUDA运行时runtime和驱动程序,必须将这些更改转换为header,纹理或表面指令,将其作为索引引用。
在启动在纹理或表面上运行的内核之前,驱动程序必须确保,在硬件上正确设置了所有状态。结果,启动此类内核,可能需要更长的时间。纹理读取,通过专用的缓存子系统进行服务,该子系统与Fermi中的L1 / L2缓存分开,并且也与常量缓存分开。每个SM具有L1纹理缓存,而TPC(纹理处理器集群)或GPC(图形处理器集群),每个都另外具有L2纹理缓存。表面读取和写入,通过为全局内存流量,提供服务的相同L1 / L2缓存,进行服务。
开普勒在纹理方面,增加了两种值得注意的技术:通过纹理缓存层次结构,从全局存储器读取数据,无需绑定纹理引用,通过地址,而不是通过索引,指定纹理header的能力。后一种技术称为“无边界纹理”。
在SM 3.5及更高版本的硬件,通过纹理缓存,读取全局内存,可以通过使用要求常量__restrict指针,或通过sm_35_intrinsics.h中的内部函数,显式调用LDG()。