gpt4 book ai didi

caching - 另一个 CUDA 纹理内存线程。 (为什么 Fermi 上的纹理内存应该更快?)

转载 作者:行者123 更新时间:2023-12-02 13:07:23 26 4
gpt4 key购买 nike

有相当多的 stackoverflow 线程询问为什么使用纹理的内核并不比使用全局内存访问的内核更快。对我来说,答案和评论似乎总是有点深奥。

NVIDIA white paper on the Fermi architecture白底黑字:

The Fermi architecture addresses this challenge by implementing a single unified memory request path for loads and stores, with an L1 cache per SM multiprocessor and unified L2 cache that services all operations (load, store and texture).

那么到底为什么人们应该期望在 Fermi 设备上使用纹理内存来提高速度,因为每次内存获取(无论它是否绑定(bind)到纹理)都会使用相同的 L2 缓存。实际上,在大多数情况下,直接访问全局内存应该更快,因为它也通过 L1 进行缓存,而纹理获取则不然。 stackoverflow 上的一些相关问题也报告了这一点。

有人可以证实这一点或告诉我我缺少什么吗?

最佳答案

您忽略了每个流式多处理器都有一个纹理缓存(请参见下图说明 Fermi 的流式多处理器)。

enter image description here

纹理缓存与 L1/L2 缓存具有不同的含义,因为它针对数据局部性进行了优化。数据局部性适用于必须访问与规则、笛卡尔、1D、2D 或 3D 网格的语义(而非物理)相邻点有关的数据的所有情况。为了更好地解释这个概念,请考虑下图,该图说明了 2D 或 3D 有限差分计算中涉及的模板

enter image description here

计算红点处的有限差分涉及访问与蓝点相关的数据。现在,这些数据不是红点的物理邻居,因为当将 2D 或 3D 数组展平为 1D 时,它们不会在物理上连续存储在全局内存中。然而,它们是红点的语义邻居,并且纹理内存非常擅长缓存这些值。另一方面,当必须频繁访问相同数据或其物理邻居时,L1/L2 缓存非常有用。

奖章的另一面是,与 L1/L2 缓存相比,纹理缓存的延迟更高,因此,在某些情况下,不使用纹理可能不会导致性能显着恶化,这要归功于 L1/L2缓存机制。从这个角度来看,当全局内存读取没有被缓存时,纹理在早期的 CUDA 架构中具有最高的重要性。但是,正如 Is 1D texture memory access faster than 1D global memory access? 中所示,Fermi的纹理内存值得使用。

关于caching - 另一个 CUDA 纹理内存线程。 (为什么 Fermi 上的纹理内存应该更快?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821131/

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