● “芯之重器”,Shared重获自由
除了Cache体系的进一步完善之外,Shared与Cache体系的最终剥离,以及Shared容量的进一步扩大对于Maxwell以及整个NVIDIA的GPU架构发展同样是一件大事。
传统意义上的Shared(DirectX 10时代)是只读不可写的,它在当时的职能就是一组给Thread Block和操作提供一个临时挂起中间结果以及运行状态,以便快速回到现场的透明延迟缓冲。但是在进入DirectX 11时代之后,Shared被赋予了更大的权限,DX11 GPU可以对Shared直接进行读写操作,而且与Unified Cache存在命中率这个导致延迟不透明的不可控因素不同,对Shared的操作延迟是受控的,这让Shared的作用有了相当程度的拓展和延伸。
NVIDIA缓冲架构发展历史回顾(图片引自后藤弘茂先生博客)
在DirectX 11时代,Shared Memory成了称职的全局寄存器溢出缓冲,ALU可以利用Shared来加速Thread以及Thread Block(Group)的运行速度和效率,而且不用担心会像直接使用Cache那样受到命中率的干扰。与此同时,Shared还会进一步影响到其他与寄存器操作相关的特性。所以在DirectX 11时代,致力于对Shared进行改进并寻找合适的“居所”一直是NVIDIA以及AMD努力的方向。
在Maxwell架构当中,NVIDIA完成了shared与L1的分离,L1 D\$也终于完成了与Tex cache的合并,这样做对双方都有好处。因为Shared在L1 D\$内部,Maxwell之前的架构当中tex cache只能独立存在,所以Unified Cache其实还不是完全的Unified。在将Shared分离出去之后,L1 D\$终于实现了彻底的Unified化,这不仅方便管理,而且有利于NV更专注且更方便的提升命中率等Cache性能。截止到目前为止的Maxwell架构均采用了相同的L1/L2 cache容量比例就是这种改进带来的改变之一,NVIDIA在GPU当中首次实现了固定比例的二级缓存体系,从而获得了统一管理并优化cache体系命中率的机会。
Shared同样从分离当中获得了好处,它现在不再担心会受到来自L1的空间制约以及对命中率干扰的顾忌,而且共享导致的来自L1 cache的空间限制也就此解除,分离后的Shared可以更轻松的提升容量,专职专用也提升了Shared的操作效率。NVIDIA同样简化了对Cache和Shared的操作流程,不需要再像过去那样为了不同程序对Shared的需求而忙活Shared和Cache的划分。
存储系统的改进为Maxwell的性能功耗比表现打下了良好的基础。在综合了cache以及Shared等多方改进之后,Maxwell的同频ALU效率较之Kepler提升了40%,每瓦特性能提升了100%,SMM单元整体效率也因此而获益,尽管ALU总量下降了33%,但却可以实现与SMX基本相当的同频性能,工作功耗也进一步下降。
也许有人认为Shared是一个关乎运算的缓存体系,与我们日常的游戏及显示并无太大瓜葛,它也不会对我们的游戏过程产生什么本质性的改变,其实不然。Shared广泛作用于DirectX 11的各个环节当中,不仅能够提高Thread的运行效率,而且还可以早Atomic等涉及实际图形显示的操作过程中发挥作用,与之相对应的OIT等特效已经被广泛的应用在DirectX 11游戏当中。提升缓存体系以及Shared的表现,实际上就是在提升GPU在运行游戏期间的执行效率。
可以预见的是,AMD的新一代架构可能同样会在Shared层面进行更多改进,而且还会和过去一样沿着NVIDIA已经走过的路前进,尤其是完成Shared与L1 Unified Cache的分离。
推荐经销商