南岛看点:计算单元/缓存设计/曲面细分
在GCN全新架构中有了一个全新的名词:计算单元(Compute Unit,CU),而它就是全新架构中的根基所在,那么CU又是由什么组成的呢?在此之前,我们先来看看AMD对GCN架构的定义:"Non-VLIW ISA With Scalar+Vector Unint”——使用标量&矢量单元的非VLIW体系。这也就意味着,在新架构中VILW SIMD架构将会彻底被摒弃,取而代之的是non-VLIW SIMD(或者叫Quad SIMD)。
从根本上来讲,二者很是相似——都可以并行的处理大量指令,但是执行效率却有天壤之别——VLIW SIMD是指令集并行(instruction level parallelism),而Quad SIMD是线程级并行(thread level parallelism)。去掉VILW之后,AMD又回归了传统的矢量SIMD。至于原因,主要由以下几个方面:
简单说来就是VLIW SIMD架构的编译器没有预调度处理机制,在执行过程中不能动态调度,其最大弱点也就在于此。比如需要通过编译器管理寄存器端口的冲突,需要特定、复杂的编译器调度,汇编创建、分析、调试较为困难,需要仔细优化才能达到峰值性能
Quad SIMD架构则就这些问题做了针对性的解决,比如不再有寄存器端口冲突,编译器调度和优化实现了标准化,汇编创建、分析、调试大大简化,工具链开发与支持更简单,性能方面也更稳定、更好预测。关于更多内容,可参看这里。
另外,指令执行方式上二者也有着很大不同。比如Cayman采用的VLIW 4 SIMD虽然每周期执行4次操作,实际上还是1条指令,而且非常依赖指令组合,需要极强的调度管理,而Quad SIMD虽然每次只能执行1个ALU操作,但是4组SIMD依然能保证执行4条线程,而且每项操作都是占用式的,利用率接近100%。
需要注意的一点就是不要和以往GPU架构中的SIMD混淆,新架构中的Quad SIMD是计算单元中的组成部分,是一个包含的16D 矢量单元(包含16个标量ALU,算数逻辑运算器)。简单说来,Cayman架构中的流处理器单元(Streaming Processor,SPU,包含4个或5个ALU)地位上相当于这里的Quad SIMD,而其SIMD(包含大量流处理器单元的阵列)地位就相当于GCN架构中的CU计算单元。
正如传统的VILW SIMD之于出流处理器单元之上,全新的Quad SIMD之上就是新架构中所谓的计算单元了(CU意义上类似于Fermi架构中的SM单元,对应上文Tahiti架构图中每一个”GCN”)。根据AMD的说法,一个CU中有4组Quad SIMD矢量单元(Vector Units),也就是包含了64个ALU,每组矢量单元各自搭配64KB矢量寄存器(Vector Registers)。
此外,还有1个硬件分支单元(Branch&MSG Unit)、1个分布式可编程调度器(Scheduler)、1个标量单元(Scalar Unit)、4KB标量寄存器(Scalar Registers)、64KB本地数据共享(Local Data Share)、4个纹理过滤单元(Texture Filter Units)、16个纹理拾取载入与存储单元(Texture Fecth Load/Store Units)、16KB一级缓存(可读写)。
总之,相比以往的VLIW架构,新架构中的每个计算单元都能同时从多个内核那里执行指令,单位周期单位面积的指令数也有所增加。总之,这种架构相比以往利用率和吞吐量更高,多线程多任务并行执行的能力也大大增强。
下面再来说说缓存设计。 以往在讨论AMD GPU架构时,很少将缓存单独进行介绍,一来是因为AMD以往官方提供的资料中对缓存提及不多,二来是因为从理论上来说缓存设计对图形计算影响不大,但是对通用计算却相当重要,而后者一直都是AMD以往GPU的弱项。此次GCN架构对于通用计算能力提升有了质的飞跃,除了计算单元部分的改革外,全新的缓存设计也起到了至关重要的作用。
从上面AMD提供的GCN架构缓存设计示意图可以看到,总体上每四个计算单元共享16KB指令缓存和32KB标量数据缓存,并与二级缓存相连;每个计算单元都有自己的寄存器和64KB本地数据共享缓存,搭配16KB可读写一级缓存(共计512KB,不再像之前只能读取),每时钟周期带宽为64字节。
最明显的一点改变就是二级缓存会和显存控制器进行搭配,这样以来在并行访问显存的时候可以大大节约宝贵的带宽。二级缓存总容量768KB,可读写,分别对应每个显存控制器分成六组,每组容量128KB,每时钟周期带宽也是64字节;全局数据共享则用于不同计算单元之间的同步辅助。
新的缓存设计中AMD特别强调了数据的共享和同步,每个计算单元的64KB本地数据共享缓存都可通过一级缓存与二级缓存相连,后者虽然与显存控制器相连,但是所有数据都是计算单元共享。并且可与CPU内存数据同步,提高了CPU与GPU的数据交换能力,这对CPU+GPU组成的异构计算是大有帮助的。
另外一个重要的改进就是新架构增加了X86 Virtual Memory(X86虚拟内存)功能,并且采用x86 64位寻址,这也就意味着GPU和CPU将拥有统一的寻址空间,可以将GPU的显存映射为X86处理器可识别的内存,要知道GDDR5的带宽在要远高于目前四通道DDR3内存的理论带宽,带来的效果是可想而知的,不仅是通用计算,大型的3D游戏也会受益颇多。
最后说一说曲面细分。曲面细分一直是近两年显卡业界比较有争议性的话题,尤其是在NVIDIA的大力宣传下,曲面细分俨然已经成为DX11最为重要的改进部分,而这方面也一直是AMD以往不得志的地方。虽然经过了一些列升级,到了上代Radeon HD 6900 Cayman采用的第八代曲面细分相比之前有了很大提高(HD6970的曲面细分性能是HD6870的两倍、HD5870的三倍),但和对手Fermi GF110相比依然有一些差距,那么到了GCN又有怎样的改进和升级呢?
根据AMD的说法,GCN架构的曲面细分已经进化到所谓的第九代,和之前之一样是两个曲面细分单元,主要改进之处有:提高顶点重新利用率、改进片外缓冲、增大参数缓存等等,而效果是所有系数下的性能均有所进步,相比于Radeon HD 6900系列的第八代技术提升最多四倍。 如果依照这个数据来看的话,超越对手应该没有什么问题。