网友1
首先明确一下是否有二级缓存这个问题,我的确记不住什么时候GPU开始带二级缓存,至少英伟达的GPU芯片发展到Kepler这个级别的时候,都已经带2级缓存。
我猜楼主是对GPU为什么以前没有二级缓存有疑惑吧,只是简单地提一下
首先明确的是,CPU对访存时延的要求很高,所以用了大缓存+乱序执行的方式容忍访存的高延时。但是缓存在什么情况下才能用得上呢?当然是时间局部性/空间局部性比较强的时候缓存才能发挥效果,减少对内存的直接访问。
然而,常规的GPU应用大多是流处理,时间局部性比较低,这是其一。第二是GPU是通过多个warps(32个threads一组)并发的方式来容忍访存时延的(也就是有多个warps,如果warpA需要访存,那么就看warpB,C,D,E....是否已经得到数据,可以切换到其他的warp进行执行)。所以在一定程度上,GPU不需要特别大的cache。另外,在部分应用中,程序员可以将频繁访问的数据放在sharedmemory上,从而降低对显存的访问。
但是GPU从原本规则的图形计算发展到现在的通用计算,一些非常规应用表现出的空间局部性或者时间局部性的特点,这可能是加L2缓存的原因。
另外要说明的是,显卡不是只有流处理器和纹理单元,GPU的存储体系有点倒三角的味道,片上有大量的寄存器,还有可划分的L1缓存和sharedmemory。
网友2
现在GPU一般是有二级缓存的。
下图为NVIDIA的keplerGK110显卡框架图:
而NVIDIAKepler显卡架构的内存层次结构如下图(其二级缓存大小为1536k):
网友3
这是AMD的GCN
NVIDIA从很久以前就有了