图形与计算齐飞
技术宅
AMD GCN架构解析
2011年12月22日,AMD正式发布其新一代HD7000系列显卡,在新一代显卡中,AMD引入了全新的GCN架构,除了传统的3D运算之外,还大大加强了GPU通用计算的功能,是AMD R600架构面世以来规模最大的变革。那么GCN架构到底有何过人之处呢?一起来了解一下吧。
VLIW模式已经跟不上时代
AMD自R600以来一直坚持VLIW模式,VLIW(超长指令)就是将很多条指令连在一起,建成一个超长指令,让GPU的运算单元可以一次启动连续执行,省去了很多调度指令、等待周期,从而提升运算效率。但VLIW在多个流处理器并行运行时存在一些难以预料的逻辑缺陷,在GPU这样规模越来越大的并行处理器上,数千个流处理器的整体吞吐率反而受到影响。
再加上DirectX 11要求GPU架构拥有更好的灵活度和通用计算能力,而非传统意义上的单纯吞吐能力,而VLIW模式高吞吐低灵活性的特点,在目前看来已经显得有些呆板了。
CU单元——GPU的基本单位
AMD对GCN架构的定义为“Non-VLIW ISA With Scalar+Vector Unint”——使用标量和矢量单元的非VLIW体系,GPU的组成单元不再是SIMD阵列,而是被称为“Compute Unit”的计算单元(简称CU)。
我们引入了HD7970显卡作为例子,为大家详细介绍CU单元。HD7970拥有2048个流处理器,被划分成了32个计算单元,每个计算单元都相当于一个运算中枢,在芯片高负荷时,每个计算单元都能同时分配、执行指令,架构利用率和吞吐量很高,更适合处理多线程多任务并行运算。
这32个并行计算单元中,每个单元内部具有64个流处理器,这些流处理器组成4个矢量单元,每个矢量单元搭配64KB矢量寄存器。每个计算单元内部还具备数据寄存器和一些辅助性功能模块,共同组成了一个完整的运算中枢。再通过新指令集,让每个计算单元都能同时领取、执行指令,众多计算单元并行处理能力很高,使得计算单元的利用率和指令吞吐量反而比VLIW更高。
近年来,GPU芯片通过堆流处理器换性能的做法缺点比较明显,比如寄存器端口冲突、调度指令复杂等,因此越多流处理器越难以达到理论峰值性能。GCN架构在规划上更为清晰、直接,32个并行运算单元,很有针对性地解决了寄存器端口的冲突问题,以高灵活度消除了很多潜在的逻辑死锁现象,从而使得芯片性能更稳定,实际性能表现更接近理论预测值。
缓存设计——通用计算的重要条件
缓存设计或许对图形计算影响不大,但对于通用计算来说是非常重要的。由于有矢量单元又有标量单元,所以GCN的缓存经过了重新设计,引入了多层次缓存,规模相当庞大而复杂。每个单元有16KB的数据缓存,每四个计算单元再共享16KB指令缓存和32KB L1标量数据缓存,并与二级缓存相连;每个计算单元都有自己的寄存器和本地数据共享,搭配16KB可读写一级缓存,每时钟周期带宽为64字节。
二级缓存总容量768KB,可读写,对应每个显存控制器分成六组,每组容量128KB,每时钟周期带宽也是64字节;全局数据共享则用于不同计算单元之间的同步辅助。
通用计算还需软件支持
在公布GCN架构时,AMD表达出了图形就是计算,计算就是图形的宏大理想。我们仍以HD7970为例,从AMD官方给出的数据来看,执行诸如光线追踪渲染、加密、傅里叶转换等常见的通用计算,可以看到HD7970与上一代产品相比,性能提升幅度没有低于50%的,像AES256甚至超过 3 倍。
对于通用计算来说,软件平台的支持也很重要。GCN架构具备相当高的可编程性,将支持C、C++以及其他高级编程语言。除此之外,AMD也在寻找相关合作伙伴来体现GPU的通用计算能力。AMD目前正在与WinZip合作开发16.5版本的相关特性,WinZip将利用OpenCL加快压缩/解压缩/AES加密的编码速度。





