我正在编写一个图像处理应用程序,我必须以未合并的方式获取像素数据。
最初我使用全局内存实现了我的算法。后来我使用纹理内存重新实现了它。令我惊讶的是,它变得更慢了!我想,cudaMalloc/text1Dfetch 样式可能有问题,所以我将其更改为 cudaArray/tex2D。没有改变。
然后我偶然发现了 Shane Cook 的“CUDA Programming”,他在其中写道:
由于计算 1.x 硬件没有缓存可言,每个 SM 的 6-8K 纹理内存提供了在此类设备上真正缓存数据的唯一方法。然而,随着 Fermi 及其高达 48 K 的 L1 缓存和高达 768 K 的共享 L2 缓存的出现,这使得纹理内存的缓存属性的使用在很大程度上已经过时。Fermi 上仍然存在纹理缓存,以确保与前几代代码的向后兼容性。
我有 GeForce GT 620M(费米,计算上限。2.1)。
所以我需要一些专业人士的建议!我是否应该通过纹理缓存深入挖掘纹理内存以优化性能?或者我应该更好地坚持使用全局内存和 L1/L2 缓存?