我正在阅读Simon Green撰写的名为Particle Simulation with CUDA的NVIDIA白皮书。
它描述了SDK粒子示例和使用的算法。
在讨论代码的性能时,作者说粒子的位置和速度的全局存储器阵列“绑定”到纹理。
现在我对纹理记忆的概念感到非常困惑。 NVIDIA CUDA编程指南在没有任何示例的情况下经历了一些非常血腥和困难的解释。
因此我有两个问题:
有人可以给我/推荐一个非常简单的(假人的纹理记忆)示例如何使用纹理和提高性能。
第40页的CUDA编程指南4.0说明“纹理可以是线性存储器的任何区域或CUDA阵列”。现在,如果(如上所述),纹理内存提供比全局内存更好的性能,为什么不将整个全局内存“绑定”到纹理内存?
答案 0 :(得分:24)
simpleTexture
,演示了使用纹理执行简单的2D坐标转换。因此粒子模拟之类的东西可以从纹理中受益,因为计算通常在考虑局部相互作用的单元格或控制体积中执行,而相邻粒子需要访问彼此的速度和加速度。与简单的线性内存缓存相比,空间本地缓存更适合这种情况。但对于其他应用程序,内存访问模式中没有固有的空间局部性,纹理与传统的缓存内存相比几乎没有任何好处。