立方地图表面:
立方体贴图表面可以通过使用SURFCubemapread()和surfCubemapwrite()(surfCubemapread和surfCubemapwrite)作为二维分层表面进行访问,即使用表示面的整数索引和在与该面相对应的图层中寻址纹理的两个浮点纹理坐标。 按表所示顺序排列。
立方体贴图分层曲面:
使用surfCubemapLayeredread()来访问立方体贴图分层表面
和SurfCubemapLayeredwrite()(surfCubemapLayeredread()和surfCubemapLayeredwrite())作为一个二维分层的表面,即使用一个整数索引表示一个立方体贴图的面和两个浮点纹理坐标, 这张脸。 如表1所示,面的排列顺序如下,例如,索引((2 * 6)+ 3)访问第三个立方体贴图的第四个面;
CUDA数组:
CUDA数组是不透明的内存布局,针对纹理获取进行了优化。 它们是一维的,二维的或三维的,由元素组成,每个元素有1,2或4个可以是有符号或无符号8位,16位或32位整数,16位浮点数, 或者32位浮点数。 CUDA数组只能由内核通过纹理存储器中所述的纹理获取或表面读取和写入(如表面存储器中所述)访问;
读/写一致性:
纹理和表面内存被高速缓存(参见设备内存访问),并且在同一内核调用中,高速缓存与全局内存写入和表面内存写入不相关,所以任何纹理获取或表面读取到已经 通过在同一内核调用中通过全局写入或表面写入写入将返回未定义的数据。 换句话说,线程可以安全地读取一些纹理或表面内存位置,只要这个内存位置已经被先前的内核调用或内存拷贝更新了,但是如果先前已经由相同的线程或者来自同一个线程的另一个线程更新 内核调用。
图形操作性:
来自OpenGL和Direct3D的一些资源可以映射到CUDA的地址空间,使CUDA能够读取OpenGL或Direct3D写入的数据,或者使CUDA写入数据供OpenGL或Direct3D使用。
在使用OpenGL互操作性和Direct3D互操作性中提到的功能映射之前,资源必须注册到CUDA。 这些函数返回一个指向struct cudaGraphicsResource类型的CUDA图形资源的指针。 注册资源的开销可能很高,因此通常每个资源只能调用一次。 CUDA图形资源使用cudaGraphicsUnregisterResource()注销。 打算使用资源的每个CUDA上下文都需要单独注册。
一旦资源注册到CUDA,可以使用cudaGraphicsMapResources()和cudaGraphicsUnmapResources()根据需要多次映射和取消映射资源。 可以调用cudaGraphicsResourceSetMapFlags()来指定CUDA驱动程序可用于优化资源管理的使用提示(只写,只读)。
可以使用由cudaGraphicsResourceGetMappedPointer()for cudaGraphicsSubResourceGetMappedArray()为CUDA数组返回的设备内存地址,由内核读取或写入映射资源。
在映射时通过OpenGL,Direct3D或其他CUDA上下文访问资源会产生未定义的结果。 OpenGL互操作性和Direct3D互操作性给出了每个图形API和一些代码示例的细节。 SLI互操作性给出了系统处于SLI模式时的具体情况。