泡泡网显卡频道 PCPOP首页      /      显卡     /      评测    /    正文

真DX11架构发威!HD5000输的心服口服

GF100对比RV870:L1 L2缓存的设计

    和CPU类似,GPU核心内部也有很多种类的缓存,他们的用途不尽相同,其中一级缓存、共享缓存和纹理缓存位于SM内部,二级缓存则是独立的一块,与光栅单元及显存控制器相连。我们首先来看看GF100的一二级缓存设计:

GF100拥有64KB可动态配置的共享缓存与一级高速缓存

    以往的GPU都是没有一级缓存的,只有一级纹理缓存,因为这些缓存无法在通用计算中用于存储计算数据,只能用于在纹理采样时暂存纹理。而在GF100当中,NVIDIA首次引入真正的一级高速缓存,而且还可被动态的划分其中一部分作为共享缓存使用。

    在GF100 GPU中,每个SM除了拥有专用的12KB纹理缓存外,还拥有64KB容量的片上缓存,这部分缓存可配置为16KB的一级缓存+48KB共享缓存,或者是48KB一级缓存+16KB共享缓存。这种划分方式完全是动态执行的,一个时钟周期之后可自动根据任务需要即时切换而不需要程序主动干预。

    一级缓存与共享缓存是互补的,共享缓存能够为明确界定存取数据的算法提升存取速度,而一级缓存则能够为一些不规则的算法提升存储器存取速度。在这些不规则算法中,事先并不知道数据地址。为了便于大家理解,我们可以把GPU的共享缓存与一级缓存看作是CPU的一级指令缓存与一级数据缓存,当然这样说是不准确的。

    对于图形渲染来说,重复或者固定的数据比较多,因此一般是划分48KB为共享缓存,当然剩下的16KB一级缓存也不是完全没用,它可以充当寄存器溢出的缓冲区,让寄存器能够实现不俗的性能提升。

    而在并行计算之中,一级缓存与共享缓存同样重要,它们可以让同一个线程块中的线程能够互相协作,从而促进了片上数据广泛的重复利用并减少了片外的通信量。共享存储器是使许多高性能CUDA应用程序成为可能的重要促成因素。

GF100拥有768KB全局共享式级高速缓存

    GF100拥有一个768KB容量统一的二级高速缓存,该缓存可以为所有载入、存储以及纹理请求提供服务。二级缓存可在整个GPU中提供高效、高速的数据共享。物理效果、光线追踪以及稀疏数据结构等事先不知道数据地址的算法在硬件高速缓存上的运行优势尤为明显。后期处理过滤器需要多个SM才能读取相同的数据,该过滤器与存储器之间的距离更短,从而提升了带宽效率。

GF100的缓存架构让各流水线之间可以高效地通信,减少了显存读写操作

    统一的共享式缓存比单独的缓存效率更高。在独享式缓存设计中,即使同一个缓存被多个指令预订,它也无法使用其它缓存中未贴图的部分。高速缓存的利用率将远低于它的理论带宽。GF100的统一共享式二级高速缓存可在不同请求之间动态地平衡负载,从而充分地利用缓存。二级高速缓存取代了之前GPU中的二级纹理缓存、ROP缓存以及片上FIFO。

RV870的独享式一二级缓存设计:

    我们再来看看ATI的缓存设计,其中一级缓存部分与NVIDIA类似,每组SIMD阵列拥有32KB的本地共享缓存和8KB的一级纹理缓存,在通用计算中纹理单元可用于负责数据拾取,这样与SIMD捆绑在一起的4个纹理单元可共享8KB的一级缓存。

    RV870总共拥有20组SIMD阵列,这样总共就是160KB的一级(纹理)缓存和640KB的共享缓存。而GF100则拥有1024KB的可动态配置的一级缓存+共享缓存,不但容量更大而且效率更高,另外还有额外的192KB一级纹理缓存。

    二级缓存部分与GT200/G80的设计相同,L2与显存控制器绑定在了一起,每个64bit显存控制器独享128KB L2,四个就是512KB。而GF100拥有单块768KB完全共享的二级缓存,同样是容量更大效率更高。

    可以看出,ATI的一二级缓存都是完全分散的,为了协调一二级缓存之间的数据交换,ATI特意设计了一个可全局共享的64KB数据缓存。至于独享式缓存与共享式缓存的效率与性能,无需多言,大家可参照CPU的发展即可略知一二。

0人已赞

关注我们

泡泡网

手机扫码关注