硬科技:浅谈GPU到底是什么(下):走向泛用化的GPGPU
GPU通用运算大致上可以分为几个时期。
1999-2006年「酝酿期」 :微软DirectX 8制定的着色器架构型 (Shader Model),让GPU具备可程式化能力,也让当时不务正业的NVIDIA,在NV30踢了大铁板,平白送给ATI趁势崛起的机会。但不可否认,NV30的CineFX的确算是其后来GPGPU的滥觞,依旧不能不肯定其价值。
2006-2009年「开创期」 :微软DirectX 10的统一着色器架构 (Unified Shader) 强化了GPU的使用弹性,并以NVIDIA G80为起点,GPU均走向兼具SIMD与MIMD部份优点的SIMT运算架构,千丝万缕的执行绪灌入被拆散的庞大运算单元。
2009-2010年「熟成期」 :因微软DirectX 11,GPU开始支援IEEE 754浮点格式,无论单倍还是双倍精度的浮点乘积和,都成为标准配备,而记忆体ECC等纠错机制,也提升了GPU的可靠性,让GPU更加接近CPU,也更适合导入高效能运算 (HPC)。
2010-2016年「实用期」 :GPU双雄一同黏死在台积电28nm制程,但这段期间CUDA、OpenCL、OpenMP与OpenACC等应用程式界面也开始成熟,克服GPU记忆体容量限制的共用虚拟记忆器,也在这时开始萌芽。
2016年开始「迈向人工智慧」 :为了强化GPU较弱的「推论」与节约记忆体及储存开销,开始支援FP16 Int8等低精度资料格式,并扩充专属功能单元与指令。此外,普遍导入HBM2记忆体,并引进新型汇流排,如NVLink。
但放眼「高效能运算」与「人工智慧」两块领域,GPGPU至今也仍存在诸多限制:
高效能运算:记忆体频宽继续闹饥荒。
科科也许当下无法接受为何GPU「频宽不够」,GDDR5X和HBM2不是都高的吓人吗?但如果以每个浮点运算能够分配到的理论频宽,GPU其实是持续下滑中的,这也导致GPU越来越仰赖共享式区域记忆体与快取记忆体。眼尖的科科一定会注意到笔者暗藏在首篇文章比较表中的伏笔。
以NVIDIA Tesla K80为例,其倍精度浮点运算理论效能是2.91TFlop,记忆体理论频宽为480GB/s,平均为0.165 Byte / Flop;反观更加先进的Tesla P100,理论效能5.3TFlop,HBM2记忆体提供732GB/s理论频宽,反而是更低的0.136Byte / Flop,V100更降低到0.12 Byte / Flop。所以说,千万不要傻傻的以为有HBM2就天下无敌,记忆体频宽旱灾的问题可大条了,支撑那些向量超级电脑的技术可一点都不简单。
人工智慧:面对专用晶片的挑战。
NVIDIA之所以能够在跟AMD的多年缠斗中胜出,说穿了,也就是因为让消费性产品和高阶专业应用分而治之,善尽其在游戏市场维持卓越的责任,而AMD就无所不备则无所不寡的两头皆空。
但即使如此,GPU仍扛了太多人工智慧压根儿不需要的绘图功能,否则Google也不会大费周章的去打造自己的TPU。在以前,透过庞大的个人电脑市场摊平研发成本、降低价格,是GPU 迈向通用运算 (以及进攻伺服器市场的x86 CPU) 的根本优势之所在,但现在反过来变成了多余的包袱。所谓「资产」和「包袱」就像硬币的两面,大概就是这个意思。
最后,为了满足各位科科的求知欲,笔者特此整理绘图硬体技术的里程碑,希望可以趁机唤醒各位科科珍贵的童年回忆。谢谢收看,我们下次再见。科科。