gpt4 book ai didi

CUDA:纹理内存对于加快计算能力 2.x 及更新版本的访问时间是否仍然有用?

转载 作者:行者123 更新时间:2023-12-02 19:47:51 26 4
gpt4 key购买 nike

我正在编写一个图像处理应用程序,我必须以未合并的方式获取像素数据。

最初我使用全局内存实现了我的算法。后来我使用纹理内存重新实现了它。令我惊讶的是,它变得更慢了!我想,也许 cudaMalloc/text1Dfetch 样式有问题,所以我将其更改为 cudaArray/tex2D。没有任何改变。

然后我偶然发现了 Shane Cook 的《CUDA 编程》,他在其中写道:

As compute 1.x hardware has no cache to speak of, the 6–8K of texture memory per SM provides the only method to truly cache data on such devices. However, with the advent of Fermi and its up to 48 K L1 cache and up to 768 K shared L2 cache, this made the usage of texture memory for its cache properties largely obsolete. The texture cache is still present on Fermi to ensure backward compati- bility with previous generations of code.

我有 GeForce GT 620M(Fermi,计算能力 2.1)。

所以我需要专业人士的一些建议!我应该更深入地研究纹理内存及其纹理缓存来尝试优化性能吗?或者我应该更好地坚持使用全局内存和 L1/L2 缓存?

最佳答案

纹理在计算能力 >= 2.0 的设备上确实很有用。

纹理和 cudaArray 可以使用存储在 space filling curve 中的内存。 ,由于更好的 2D 空间局部性,可以实现更好的缓存命中率。

纹理缓存与其他缓存是分开的。因此它有自己的专用内存和带宽,并且从中读取不会干扰其他缓存。如果您的 L1/L2 缓存压力很大,这一点就变得很重要。

纹理还提供内置功能,例如插值、各种寻址模式(钳位、环绕、镜像)以及使用浮点坐标进行归一化寻址。这些可以在没有任何额外成本的情况下使用,并且可以极大地提高需要此类功能的内核的性能。

在早期的 CUDA 架构上,纹理和 cudaArray 无法由内核写入。在计算能力 >= 2.0 的架构上,它们可以通过 CUDA 表面编写。

确定是否应该在全局内存中使用纹理或常规缓冲区取决于内存的预期使用和访问模式。这将是特定于项目的。

您正在使用 Fermi 架构,其设备已更名为 6xx 系列。

对于使用 Kepler 架构的用户,请查看 NVIDIA 的 Inside Kepler推介会。特别是幻灯片纹理性能纹理缓存解锁const __restrict示例

关于CUDA:纹理内存对于加快计算能力 2.x 及更新版本的访问时间是否仍然有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19687778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com