NVIDIA已经发布了一段时间的maxwell GPU,但是在阅读"Maxwell调优指南“时,我对L1缓存的功能感到困惑。在开普勒时代,全局内存访问仅缓存在L2中,而L1用于缓存由寄存器溢出引起的本地内存访问。通过阅读NVIDIA的文档,这种本地内存缓存是我知道的唯一能从L1缓存中受益的东西。然而,在“麦克斯韦调谐指南”第1.4.2.1节中,NVIDIA说:
与开普勒一样,第一代麦克斯韦的全球负载仅缓存在L2中.本地负载也仅在L2中缓存。
Cuda6.0增加了两个新的设备属性globalL1CacheSupported和localL1CacheSupported,以检查设备是否支持全局内存L1缓存和本地内存L1缓存,因此我在GTX 780和GTX 980卡上对这两个属性进行了测试,结果使我更加困惑:
globalL1CacheSupported localL1CacheSupported
GTX780 1 1
GTX980 0 0GTX 980的结果验证了"Maxwell调优指南“中的语句,这让我感到困惑,因为如果是这样的话,那么L1缓存用于什么呢?我无法理解的另一件事是,GTX 780是GK110卡,从GK110白皮书中,Keper也将其全局内存访问仅缓存在L2中,因此,对于GTX 780卡,globalL1CacheSupported返回1没有任何意义。希望有人能澄清我的谜团。
发布于 2015-03-06 14:02:13
麦克斯韦,L1功能已经与纹理缓存相结合。在调谐导轨中也提到了这一点。
费米设备引入了L1,它用于全局和本地负载缓存。L1是一个直通式缓存,所以它对全球和本地商店的影响相对较小。
对于开普勒,L1对于全局负载是禁用的,但对于本地负载仍然有效。
那么L1缓存用于什么呢?
对于Maxwell,L1对于全局负载的默认行为是相同的--它们没有缓存。但是,您可以“选择- in”将全局负载缓存在L1中,如您所提到的麦克斯韦调谐导轨中所述:
“以类似开普勒GK110B的方式,GM204默认保留这种行为,但也允许应用程序选择在其统一的L1/纹理缓存中缓存全局负载。opt-in机制与GK110B相同:在编译时将
-Xptxas -dlcm=ca标志传递给nvcc。”
GK110B是GK110的变体,出现在K40设备中。在K20/K20x上,L1行为是不可修改的(对于全局负载关闭)。在K40上,L1的默认行为与K20/K20x相同。但是,可以重写默认行为来为全局负载打开L1。
https://stackoverflow.com/questions/28895133
复制相似问题