从CPU架构和技术的演变看GPU未来发展
再来看看GPU二级缓存部分的设计,这一方面就与CPU非常相似了。
★ Cypress的二级缓存:绑定显存控制器的分离式设计
以往的GPU,包括NVIDIA上代的GT200以及AMD最新的Cypress核心,二级缓存都是与显存控制器绑定在一起的,其作用就是缩短GPU到显存的响应时间。由于显存控制器一般都是64bit一组,为多组模块化设计,因此二级缓存也被划分为N个独立的模块,而不是统一的整体。
Cypress:L2绑定Memory Controller
Cypress拥有4个64bit显存控制器,每个显存控制器绑定128KB容量的二级缓存,总计512KB,这个容量要比NVIDIA上代的GT200大一倍。
★ GF100的二级缓存:统一的大容量高速缓存
而GF100拥有一个768KB容量统一的二级高速缓存,该缓存可以为所有载入、存储以及纹理请求提供服务。二级缓存可在整个GPU中提供高效、高速的数据共享。物理效果、光线追踪以及稀疏数据结构等事先不知道数据地址的算法在硬件高速缓存上的运行优势尤为明显。后期处理过滤器需要多个SM才能读取相同的数据,该过滤器与存储器之间的距离更短,从而提升了带宽效率。
统一的共享式缓存比单独的缓存效率更高。在独享式缓存设计中,即使同一个缓存被多个指令预订,它也无法使用其它缓存中未贴图的部分。高速缓存的利用率将远低于它的理论带宽。GF100的统一共享式二级高速缓存可在不同请求之间动态地平衡负载,从而充分地利用缓存。二级高速缓存取代了之前GPU中的二级纹理缓存、ROP缓存以及片上FIFO。
GF100的缓存架构让各流水线之间可以高效地通信,减少了显存读写操作
统一的高速缓存还能够确保存储器按照程序的顺序执行存取指令。当读、写路径分离(例如一个只读纹理路径以及一个只写ROP路径)时,可能会出现先写后读的危险。一个统一的读/写路径能够确保程序的正确运行,同时也是让NVIDIA GPU能够支持通用C/C++程序的重要因素。
与只读的GT200二级缓存相比,GF100的二级高速缓存既能读又能写,
而且是完全一致的。NVIDIA采用了一种优先算法来清除二级缓存中的数据,这种算法包含了各种检查,可帮助确保所需的数据能够驻留在高速缓存当中。
★ GF100共享式二级缓存堪比酷睿2:
可以看出,ATI的一二级缓存都是完全分散的,为了协调一二级缓存之间的数据交换,ATI特意设计了一个可全局共享的64KB数据缓存。
而GF100的一级缓存可以根据需求动态的为共享缓存或者一级缓存分配较大的容量,从而加速数据处理。二级缓存更是大容量一体式设计,当线程组在一级缓存中找不到数据时,可以直接从“海量”的二级缓存中索取,缩短了数据请求与定址时间,消除了瓶颈。
至于独享式缓存与共享式缓存的效率与性能,无需多言,大家可参照CPU的发展即可略知一二。