使用显卡或者说 GPU 执行通用计算早就已经不是什么新鲜的事情,这得益于整个行业近年来不遗余力的推动,例如 AMD、Apple、NVIDIA、Intel 等都把 GPU 执行非图形处理作为新业务的重中之重来推广。
虽然说 GPU 通用计算不再是新鲜事,但是对于许多人而言,可能也就仅限于听过而已,其中的一些关键信息缺并不十分了解,这并不奇怪,因为“听过”的人当中其实大部分都是游戏玩家,就算对这方面有更多认识(例如懂得写 OpenCL 代码)的人来说,也未必能对厂商为什么会推出专门的超算卡有充分的认知。
我们以 AMD FirePro 为例,这个产品线最初是叫 FireGL,本是针对图形工作站为主的应用,因为图形工作站的最突出特点就是使用 OpenGL 作为图形 API。后来 AMD 推出了 FireStream 产品线,这个产品线类似于竞争厂商的 Tesla 产品线,为了统一品牌推广,AMD 将 FireStream 和 FireGL 产品线合并,现在分别名为 FirePro S 系列和 FirePro W 系列,S 和 W 分别是英文中服务器和工作站的首字母。
拿下 2014 年度 Green500 第一名的 AMD FirePro S9150 服务器超算卡
AMD FirePro S9150 采用了特别设计的被动散热方案
从外观上看 S 和 W 的区别其实很简单,分别就是 S 是被动散热,而 W 则是主动散热,而且 W 是主打传统图形工作站应用的,其中要 W8X00 级别以上的产品才具备较高的浮点计算性能,往下的 W 系列显卡不强调双精度性能(至少目前是这样)。
除了双精度性能的区别外,W8X00 级别以上的产品一般还会配备较大的卡载内存,这样的设计不仅有利于复杂场景的工作站应用,而且对通用计算来说也是有非常大的助益。
在 Gorden Bell(DEC 公司早期雇员之一,早期的 PDP 小型机设计者,现在美国计算机协会设立的 Gorden Bell 奖被视作计算机界的诺贝尔奖,于每年 SC 大会上颁发)所撰写的《Great and Big Ideas in Computer Structures》一文中,关于资源平衡有这样的说法:
按照上世纪 60 年代提出 的 Amdahl 法则,指令速度、内存容量、位元速率的性能平衡,应该做到每秒一条指令对应一个字节的一级内存大小和每秒一个位元的内存带宽(没错,这里面的速度是非常低的,因为这些都是上个世纪计算机兴起时候的指标)。到了90 年代,在科学计算领域,要实现每秒浮点操作(flops)与内存的平衡,就得做到不低于 1 flops/字节 到 1flops/8字节。
在多级内存方面,美国 Los Alamos National Laboratory(洛斯阿拉莫斯国家实验室)曾经对若干个“重大挑战”的计算问题进行了评估,得出的结论是:每个一级内存字节需要 1/15 到 5000 个二级内存字节才能达致平衡。
按照这样的说法,如果 GPU 里有 2.8 MiB 内存(例如 AMD GPU 里称作 Local Data Store 的那块小内存),就需要 14 GiB 片外内存才能在科学计算上做到“性能平衡”,看到这里,也就不能难解释为何 AMD FirePro W9100 和 FirePro S9150 搭配高达 16 GiB 的卡载内存了——这不是随便拍下脑袋决定的。
AMD FirePro 产品针对超算的一个特别设计就是提供了 ECC 的支持,而这个特性在游戏卡中是不提供的。
超算执行的操作往往涉及大量的数据处理,但是受到宇宙背景射线的影响,存储芯片非常容易因此而导致位元错误,例如 8 (0011 1000)会变成 9(0011 1001)。
根据美国 NASA(国家航空航天局)发布的一份名为“In-Flight Observations of Multiple-Bit Upset in DRAMs”的文件有这样的统计结果:
在 1997 年发射的卡西尼-惠更斯号土星探测器内有两个相同的飞行记录仪,它们各有一个 2.5 GiB 采用商用动态内存芯片的内存阵列。在头两年半的飞行中,飞船的工程自动遥测报告显示每天都持续有大约 280 个位元错误,而在头一个月的时候更是可能因为太阳粒子活动,出现了单日错误数增加超过 4 倍的现象发生。
这样的现象会随着 DRAM 密度的增加而进一步加重,这意味着随着工艺进步,芯片越来越小、耗电越来越低,同面积存储器发生错误的次数越多。GCN 微架构在芯片级提供了硬件 ECC,所有的片上缓存都受到 ECC 技术的保护,能侦测并矫正片上缓存受宇宙射线影响导致的单个位元错误。
在片外内存或者说显卡卡载内存上,AMD 为 FirePro 提供了一个驱动面板开关,允许用家自行决定是否启用 ECC 技术,用来确保这部份数据存储和传输可靠性。当然,由于 GDDR5 缺乏 ECC,因此这里就涉及到一些额外的数据传输进行验证,容量和带宽会因此受到影响,相应显卡的性能会有一定的影响,影响幅度取决于具体的应用。
和速度受到一定影响相比,计算结果是否准确才是超算最为关心的,尤其是大规模集群计算,这点和游戏卡只是输出至显示器、几乎不存在数据复用的情况很不一样。
说到这,就不得不提一个容易让人误解的问题:交火并行渲染。Crossfire 是 AMD 的并行渲染技术,不过它并不能让未指定设备的超算代码自动以并行方式运行。交火的时候,驱动程序会自动安排好渲染帧或者中间数据的处理,然后副卡把渲染好的数据传输到主卡里进行后续的处理(例如合并为最终输出的色彩缓存数据)。
但是超算的执行方式并不是这样的,原因在于数据复用情况要复杂许多,理论上它也不需要画面输出操作,故此交火和超算是没啥关系的,因此在 FirePro 上你是看不到游戏卡的那个交火桥接插头,因为多卡并行完全是由超算代码开发人员或者编译器来实现的。
综上所述,你可以看到:
1、蓝宝 PGS AMD FirePro 和游戏卡在硬件上存在板卡级的区别。
2、蓝宝 PGS AMD FirePro 和游戏卡存在软件驱动的重要区别。
3、蓝宝 PGS AMD FirePro 有多种提供给超算用户的方案,例如偏工作站应用、强调单精度性能耗电比的 W 系列以及强调双精度性能、偏向服务器、注重机箱型制的 S 系列。
不过除了这几点外,还有一点需要在最后提一下,那就是产品生命周期方面,FirePro 提供了至少 3 年的售后支持,而游戏卡一般也就是 1 年,更重要的是,FirePro 面向的超算是技术含量远远高于游戏的应用,非常需要来自厂商的第一手技术支持,AMD 在这方面为 FirePeo 提供了相应的有力支持,经常有培训班提供,为用户打开了价值提升的空间。