据我所知,GPU遵循以下步骤(全局内存-l2-l1-寄存器共享内存)将数据存储到以前的NVIDIA GPU架构的共享内存中。
然而,maxwell gpu(GTX980)在物理上将统一缓存和共享内存分开了,我想知道这个架构也遵循将数据存储到共享内存的相同步骤吗?或者它们是否支持全局和共享内存之间的直接通信?
答案 0 :(得分:2)
这可能会回答您关于Maxwell架构中内存类型和步骤的大部分问题:
与Kepler一样,Maxwell中的全局加载仅缓存在L2中,除非使用Kepler中引入的LDG只读数据缓存机制。
与Kepler GK110B类似,GM204默认保留此行为,但也允许应用程序选择加入其统一L1 / Texture缓存中的全局负载缓存。选择加入机制与GK110B相同:在编译时将-Xptxas -dlcm = ca标志传递给nvcc。
本地负载也仅缓存在L2中,如果使用Kepler L1本地负载命中率很高,这可能会增加寄存器溢出的成本。因此,应重新评估占用与溢出的平衡,以确保最佳性能。特别是考虑到算术延迟的改进,为Maxwell构建的代码可能会受益于较低的占用率(由于每个线程的寄存器增加)以换取较低的溢出。
统一的L1 /纹理缓存充当内存访问的合并缓冲区,在将数据传递给warp之前收集warp线程请求的数据。此功能以前由Fermi和Kepler中的单独L1缓存提供。
来自" 1.4.2节。内存吞吐量",子部分" 1.4.2.1。统一L1 /纹理缓存"来自Nvidia的Maxwell tuning guide。
这两个之后的其他部分和子部分还教导和/或显式有关共享内存大小/带宽,缓存等的其他详细信息。 试一试!