● 只有统一的路才对大家的胃口
首先意识到并开始尝试解决问题的是NVIDIA。在Tesla构架之后,NVIDIA为我们带来了支持DirectX 11的Fermi构架。Fermi构架在缓冲方面最显著的特色,在于引入了统一的unified cache。
Fermi构架采用大并行度的GPC分块设计,每个GPC内部分为4组SM单元,每个SM单元拥有完整支持读写操作的L1 cache体系。该L1 cache体系可以在16K shared memory/48K L1 cache以及48K shared memory/16K L1 cache之间进行切换,不仅能够满足DirectX 11要求的32K shared的最低限度,更为传统的DirectX 10以及特种程序的需要提供了支持。而在整个GPC结构的外围,NVIDIA配置了768K的L2 cache,不仅能够充当L1的扩展,将其与显存联系起来,更可以同时为TMU提供Texture cache服务。除此之外,新的cache体系还可以直接充当几乎所有寄存器的溢出缓冲。
Fermi构架存储体系
Fermi中unified cache的引入,为人们展示了一种很好的解决缓冲资源各自为战现状的途径。与CPU一脉相承的统一多级cache让大多数单元从同一个缓冲体系中获益,ALU也好TMU也罢,想要缓冲的时候直接访问同一个cache就行了。这种做法等效的同时提升了大多数单元的可用缓冲资源水平,减少了register溢出导致的灾难性后果,最终提高了整个体系中各单元的单位周期复用率。
当然,这世界上没有一蹴而就的完美,现阶段Fermi cache体系也存在着美中不足。为了照顾传统的shared应用,Fermi的L1体系并未完全unified化,这不仅给驱动控制添加了难度,也为cache命中算法的开发制造了不小麻烦。尽管如此,引入unified cache依旧让我们看到了巨大的好处和美好的未来。有介于此,NVIDIA决定在下一代的Kepler构架中继续强化cache也就变得顺理成章了。
Fermi的L1体系为照顾shared而没有完全unified化
在unified cache的引入中,受益最大的可以说是寄存器。接下来我们就来看看缓存体系的最后也是最快的一部分,究竟是怎样为GPU运行提供帮助并从unified cache中获益的吧。