显卡 频道

融入新GCN架构 AMD HD7970显卡技术解析

  GNC Compute Unit

GNC Compute Unit
▲GCN CU的功能模块图

  上图是GCN CU的功能模块图。可以看到,一个GCN CU包含了:

  1 个向量计算单元模块(Vector Unit,里面有4 个16路SIMD计算子模块);

  每个SIMD-16 模块拥有4*64KiB 向量寄存器;

  1 个标量计算单元模块(Scalar Unit),用于执行整数指令、媒体指令和浮点原子操作(min、max、cmpxchg)。

  标量计算单元模块拥有 4KiB 标量寄存器

  每个GCN CU拥有64KiB LDS;

  每个GCN CU拥有16 KiB 数据 Cache

  每个GCN CU拥有1 个纹理拾取或者说内存存取模块(单周期执行16 个32-bit Load/Store 操作);

  每个GCN CU拥有1个单周期执行4*32bit 线性滤波的纹理滤波单元;

  图中的Branch&Message(分支与信息)单元可以用于执行分支指令和 Debug 等操作。

  作为多线程处理器,AMD和NVIDIA的DX11 GPU都有一定的线程粒度,NVIDIA的线程粒度被称作 Warp,一个Warp是32 "线程";而AMD的线程粒度称作wavefront,粒度是 64 "线程"。

  严格来说,所谓的线程其实是指处理数据的宽度,不过NVIDIA 偷换概念后,AMD也跟着上,都叫起“线程”了,而传统意义上的硬件线程本应该是Warp和wavefront这级别的才对。

  在GCN CU上,一个周期能执行一个wavefront(硬件线程),或者说4个周期执行4 个wavefront。

  因为线程调度器实际上是每次将4 个wavefront 派给CU,CU上的每个SIMD-16 单元执行其中一个,因为同一个wavefront 的指令都是一样的,只是所处理的数据地址是截然不同的。

  所以SIMD-16 单元可以4 个周期完成一个Wavefront,这样由4 个SIMD-16 组成的CU 看上去就能单周期执行一个wavefront或者说4 个周期执行4 个Wavefront。

  AMD Cypress架构的wavefront(简称C-wavefront) 和GCN 的wavefront 是不一样的,C-wavefront 粒度虽然也是64 “线程”,但是每个“线程”是由一个VLIW5 的指令包组成的,虽然跑图形的时候问题不大,但是跑通用计算的话,效率就会大打折扣,需要比GCN wavefront更高带宽的指令总线,增加了开发工具的复杂性,性能的可预测性也存在不定因素。

  重新设计的GCN CU现在更像一个80年代流行的向量处理器环路——极为简化的向量、标量组合,具备最高效的标量开发模型,和NVIDIA Fermi的设计思路一样,可以让程序员觉得是在给一个标量处理器开发程序。

  每个RADEON HD 7970的GCN CU 的线程管理器最高可以同时容纳32 个 wavefront,也就是说当计算单元是空闲的话,可以有32个待处理的硬件线程可以选着派给计算单元执行。相比之下,NVIDIA Fermi的每个SM(相当于CU)最高可以有48 个warp 供选择执行。

  在多线程执行上,CU拥有更多的子(调度器)模块,可以同时执行4个硬件线程,而NVIDIA Fermi则只有两个子(调度器)模块,可以同时执行两个硬件线程,这样的设计并没有一定的优劣之分,每个Fermi SM或者 GCN CU SIMD16 都能获得平均24 个(GF100/GF110) 或者16 个(GF10X/GF11X 以及GCN)硬件线程分派,硬件线程数越多,计算资源的利用率自然越高。

  Tahiti 一共拥有32 个CU,RADEON HD 7970 是足本的规模,而RADEON HD 7950则被烧成28 个 CU。

0
相关文章