Memory 纹理存储空间

Memory 纹理存储空间,memory,cuda,hierarchy,texture-mapping,Memory,Cuda,Hierarchy,Texture Mapping,当我将数组绑定到CUDA中的纹理时 数组是否复制到纹理空间?或者 该数组引用是否作为纹理 如果答案是1.,那么我可以绑定一个纹理并安全地从纹理内存空间提取数据,同时将结果写入数组,数组在全局内存中分配 如果答案是2,那么纹理内存是一个全局内存空间,在这里缓存数据并从空间上获取数据 我想知道这个话题,因为我看到了一些与这个话题相关的问题,我现在还不清楚答案 提前感谢。答案是第二个选项,但从那里事情会变得更复杂一些。没有“纹理内存”这类东西,只有通过专用硬件访问的全局内存,包括GPU读缓存(根据卡的

当我将数组绑定到CUDA中的纹理时

  • 数组是否复制到纹理空间?或者
  • 该数组引用是否作为纹理
  • 如果答案是1.,那么我可以绑定一个纹理并安全地从纹理内存空间提取数据,同时将结果写入数组,数组在全局内存中分配

    如果答案是2,那么纹理内存是一个全局内存空间,在这里缓存数据并从空间上获取数据

    我想知道这个话题,因为我看到了一些与这个话题相关的问题,我现在还不清楚答案


    提前感谢。

    答案是第二个选项,但从那里事情会变得更复杂一些。没有“纹理内存”这类东西,只有通过专用硬件访问的全局内存,包括GPU读缓存(根据卡的不同,每MP 6-8kb,见Cuda编程指南附录F中的表F-2)和许多硬件加速过滤/插值操作。有两种方法可以在CUDA中使用纹理硬件:

  • 将线性内存绑定到纹理,并使用1D fetch API在内核中读取该纹理。在这种情况下,纹理硬件实际上只是作为一个读缓存,并且(IIRC)没有可用的过滤操作
  • 创建CUDA数组,将线性内存的内容复制到该数组,并将其绑定到纹理。生成的CUDA阵列包含线性源的空间有序版本,以某种形式(未记录)存储在全局内存中。纹理硬件提供对该数组的缓存访问,包括使用硬件加速过滤的同步内存读取

  • 您可能会发现值得一读的GT200体系结构概述,以更好地了解实际体系结构如何实现API公开的内存层次结构。

    惊人的答案:)我想知道的是未记录和传闻;)因此,如果我写入原始数组并从绑定的纹理中获取数据,行为是未定义的,对吗?。谢谢。在CUDA中,纹理和数组是不透明的只读对象。不允许写入(甚至不能保证不同硬件之间的内部纹理布局相同)。如果您有一张费米卡,并且正在使用CUDA 3.2或更高版本,则可以使用曲面。AFIAK提供对“纹理”的读取和写入,尽管目前没有过滤支持。在内核调用中,纹理缓存不保持与底层全局内存存储的一致性,请参阅编程指南第3.2.10.4节。使用过滤的2D纹理不必绑定到不透明cudaArray,也可以绑定到使用cudaMallocPitch()分配的基音线性内存。