使用显卡或者说 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 分别是英文中服务器和工作站的首字母。
从外观上看 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字节。