2

据我所知,GPU 遵循步骤(全局内存-l2-l1-寄存器共享内存)将数据存储到以前的 NVIDIA GPU 架构的共享内存中。

但是maxwell gpu(GTX980)在物理上分离了统一缓存和共享内存,我想知道这个架构也是按照同样的步骤来存储数据到共享内存的吗?还是它们支持全局内存和共享内存之间的直接通信?

  • 使用选项“-dlcm=ca”启用统一缓存
4

1 回答 1

3

这可能会回答您关于 Maxwell 架构中的内存类型和步骤的大部分问题:

与 Kepler 一样,Maxwell 中的全局负载仅缓存在 L2 中,除非使用 Kepler 中引入的 LDG 只读数据缓存机制。

与 Kepler GK110B 类似,GM204 默认保留此行为,但也允许应用程序选择在其统一的 L1/纹理缓存中缓存全局负载。选择加入机制与 GK110B 相同:在编译时将 -Xptxas -dlcm=ca 标志传递给 nvcc。

本地负载也仅缓存在 L2 中,如果 Kepler 的 L1 本地负载命中率很高,这可能会增加寄存器溢出的成本。因此,应重新评估占用与溢出的平衡,以确保最佳性能。特别是考虑到算术延迟的改进,为 Maxwell 构建的代码可能会受益于较低的占用率(由于每个线程增加的寄存器),以换取较低的溢出。

统一的 L1/纹理缓存充当内存访问的合并缓冲区,在将数据传递给 warp 之前收集 warp 线程请求的数据。此功能以前由 Fermi 和 Kepler 中的单独 L1 缓存提供。

来自 Nvidia的Maxwell 调优指南中的“1.4.2. 内存吞吐量”部分的“1.4.2.1. Unified L1/Texture Cache”小节。

这两节之后的其他部分和小节也教授和/或明确有关共享内存大小/带宽、缓存等有用的其他细节。试一试!

于 2016-04-20T13:11:12.560 回答