在CUDA中,对于纹理和表面内存来说,聚合访问模式是否重要?

5
根据我使用CUDA的经验,我更喜欢使用带有CUDA数组引用的纹理内存,因为它具有2D/3D空间缓存机制,而且我的输入数据大多可以作为2D纹理排列。现在,我遇到了一个问题,既可以将输入建模为线性数组,也可以建模为2D纹理。(顺便说一下,当我谈论纹理内存时,我总是指使用它与2D CUDA数组引用一起使用。)我知道,在使用常规全局内存时,连续访问模式非常重要;如果warp中的线程读取基地址对齐到64字节边界的连续地址,则整个warp可以通过单个内存访问来服务(协同访问)。我想知道,纹理内存是否也很重要?我认为不应该,因为纹理内存的目的是不同的;它针对2D/3D接近的访问进行了优化,并使用所需像素和周围几行列更新纹理缓存,就我所知。因此,我认为在2D纹理内存中的一行的连续访问模式并不会有优势,相反,它可能会污染周围行列数据并降低性能。无论如何,这只是我在阅读编程指南和其他资源后的想法,我想确认一下:纹理内存的协同访问模式是否像常规全局内存一样重要?
1个回答

8
不,对于NVIDIA CUDA GPUs上的纹理访问,合并访问模式并不重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接