在 2012 年,AMD 正式推出了代号为的 Tahiti 的新 GPU,这个 GPU 的特别之处在于采用了名为 Graphics Core Next 的全新架构
在 2012 年,AMD 正式推出了代号为的 Tahiti 的新 GPU,这个 GPU 的特别之处在于采用了名为 Graphics Core Next 的全新架构,指令集由 VLIW5/VLIW4 改为通用计算效率更好的标量指令(硬件隐式 SIMD),从那时起到现在,AMD 的所有新 GPU 都采用了 SIMD16 的 GCN 微架构,特别是在通用计算领域,GCN 的问世让 AMD 在这个领域得以和竞争对手一较高下。
GCN 发布至今,按照 AMD 的划分,经过了 1.0、1.1、1.2 三个 ISA(指令集)版本,1.0 对应的 GPU 系列是 Southern Islands(旗舰自然是 Tahiti),1.1 对应 Sea Island(旗舰是 Hawaii),1.2 是目前最新的,对应 Volcanic Islands(目前该系列最高端的 GPU 代号是 Tonga)。
这些 ISA 版本号一般只出现在开发工具和资料中,平常大家看到的都是产品的具体型号,这就好像 NVIDIA CUDA 资料中提到的 Compute Capability(计算能力)一样,便于开发人员区分设备。
一般来说,版本号较新的微架构都会具备上一版本更丰富的“关键特性”,但是它和性能没有直接关系,性能的高低取决于实现(也就是具体的 GPU),例如 GCN 1.1 支持 OpenCL 2.0,但是 GCN 1.1 的低端系列在性能上是无法比得上 GCN 1.0 的高端产品。
出于宣传的考量,GPU 厂商会把一些术语弄得让人摸不着头脑,有时候还会做一些夸张阐述。例如 NVIDIA 把功能单元称作“core(内核)”,而最低端的 GPU 就有几十个这样的功能单元,高端顶配的更是有数千个,于是乎就出现了 GPU 有数千个内核,看上去挺吓人的。
为了避免不必要的误解和统一,我们在这里以 OpenCL 中的术语为准,例如功能单元称作 PE,GPU 厂商的 thread 则称作 work-item,thread block 称作 work-group。AMD 在 GCN 发布后,也是采用了 OpenCL 的术语来阐述 GPU 中的各种名词,如果你手头有一本 OpenCL 的书籍或者电子文档的话,就能非常清楚我说的是什么。
GPU 中和 CPU 内核比较相似的单位就是 AMD/OpenCL 中称作 Compute Unit 或者是 NVIDIA 称作 SM(Kepler 中称作 SMX,Maxwell 中称作 SMM) 的组件,因为它们都有名为 Program Counter(程序计数器)的单元,用作指向当前 CU 或者 SM 下一条要执行的指令地址,这使得 CU/SM 看上去非常类似与 CPU 概念中的内核。
当然由于受到制造工艺的限制,目前的 CU/SM 和 CPU 内核相比还是有不少区别的,例如 CPU 很早之前就可以抢占式多任务,而目前的 GPU 都不具备这样的特性,只能是当前的 kernel 跑完后再跑另一个 kernel,又或者直接咔嚓掉当前还在跑的 kernel(如果显卡连接着显示器的话,在 Windows 中遇到 kernel 长时间没有执行完毕的话就会出现大家“喜闻乐见”的 GPU 复位)。
上图就是 GCN 1.0(旗舰 GPU 为 Tahiti)的 Compute Unit 模块图,其中的 SIMD0/1/2/3 就是前面提到的 SIMD 单元,一个 CU 里有四个,一个周期最多能跑 64 个 work-item,如果是 FMA 或者 MADD 指令的话,就相当于一个 CU 一个周期跑 128 个浮点操作。
除此以外,每个 CU 中还有一个独立的标量单元,独立标量单元的存在主要是为了省电而非改善性能,因为用向量单元跑一些标量指令(例如分支)很浪费电力(NVIDIA Kepler 没有这样的标量单元,所以跑一些标量指令的时候耗电和向量单元全开的时候一样)。
GPU 计算涉及到的计算性能、寄存器堆、存储层次等重要信息都能从上图中了解一二,为了便于大家查看,我将一些数据整理出来:
GPU 计算属于异构计算,由 CPU + GPU 组成,但是 GPU 本身就是一个复杂的异构芯片,这是因为图形渲染有很多动作都是经常使用的,所以有一些动作就设计成硬件化,例如几何处理、纹理处理、光栅操作等,在许多科学计算中都不会使用上它们,所以上面的表格中就不列出它们了。
从表格可以看出,基于 GCN 1.1 的 AMD FirePro S9150 主要优势是双精度性能达到了 2.53 TFLOPS,是 Tesla K40 1.68 TFLOPS 的 1.5 倍,这个指标也远远高于另一个对手 Intel Xeon Phi 7120p 的 1.208 TFLOPS,实际上 Xeon Phi 7120p 的2.416 TFLOPS 单精度性能比 AMD FirePro S9150 的双精度性能还低。
在测试工具 SHOC(Scalable Heterogeneous Computing,可延伸异构计算)中,Tesla K40 的单精度/双精度实测结果是 3.7/1.41 TFLOPS,而 FirePro S9150 是 4.98/2.24 TFLOPS,S9150 比 K40 分别高出 26% 和 37%。
此外,在内存带宽以及内存容量方面,AMD FirePro S9150 也比 K40 更有优势,尤其是内存容量,16 GiB 的 FirePro S9150 可以比 K40 存放更大的工作集。
当然,基于 GK110b 的 Tesla K40 在一些细节上也是些优势的,例如每个 work-group 的 work-item 可以获得的寄存器资源更多一些(K40:128 vs S9150:102.4),不过表中我未列出的每个 work-item 最高可分配 local memory 资源方面倒是 FirePro S9150 更大(K40:32 byte vs S9150:50 byte),原因是 S9150 的 local memory 和 L1 cache 采用了独立分离的方式而不是 K40 中的合并方式。
在 32-bit 寻址模式下,Tesla K40 的 local memory 带宽/浮点性能关系是 0.33 字节/FLOP,而 AMD FirePro 则是 1.5 字节/FLOP,说明 S9150 的浮点指标能获得更充沛的 local memory 带宽支持,这同样表明了 GCN 的 local memory/L1 cache 分离设计优势。
如果我们不看上面的数字游戏,只看实际的结果,那么我们可以举出一个证明 AMD FirePro S9150 架构优势的实证:2014 年的年度 Green500 绿色超级计算机第一名就是由搭载 FirePro S9150 的德国 L-CSC 夺得,这台尚未完全构建完毕的系统实现了每瓦 5.27 GFLOPS 的 HPLinpck 实测性能,比年中时候的第一名足足高出了 20%。
最后要说的是,不同厂商的不同型号 GPU 在微架构上是存在不同程度的差异,作为 GPU 超算的使用者,有些细节尤其是浮点性能指标、内存容量以及软件开发环境都是不可忽视的考量点,在选择开发平台的时候,多翻翻厂商的技术资料文档,这类信息一般都能查找到,本文尝试对其中的一些数据信息进行了汇总,希望能对大家有所帮助。
网友评论