图形加速器的诞生:一场改变世界的意外
1993年的一个夜晚,加利福尼亚州圣何塞市的一家不起眼的餐厅里,三十岁的黄仁勋坐在角落里,神情专注地听着对面两位同伴的交谈。窗外是硅谷的万家灯火,而他们的心中,正在点燃一个足以改变整个计算世界的梦想。餐厅的灯光昏黄而温暖,菜单上的价格实惠可口,但对于这三个满怀雄心的年轻人来说,眼前这张餐桌的对面,坐着的将是未来万亿市值帝国的最初合伙人。
这个场景,或许是半导体产业历史上最值得铭记的“路边摊”时刻之一。黄仁勋当时已经在LSI Logic公司工作了八年,从一名普通的工程师成长为图像处理部门的负责人。他亲眼见证了个人电脑如何一步步走进千家万户,也敏锐地察觉到一个巨大的市场机会正在悄然浮现——那就是图形处理。彼时的个人电脑显示器还是单调的绿色字符和笨拙的Windows界面,而黄仁勋相信,未来的电脑将需要绚丽的色彩、平滑的动画和逼真的三维世界,而这一切,都需要一颗专门处理图形运算的“心脏”。
黄仁勋并非唯一一个看到这个机会的人。实际上,整个九十年代初期的硅谷,正涌动着一股图形芯片的创业热潮。个人电脑游戏《毁灭战士》和《雷神之锤》的横空出世,让玩家们第一次意识到,原来电脑屏幕上可以呈现出如此令人血脉偾张的视觉体验。《毁灭战士》在1993年发布后的短短两年内,就售出了超过一千万份,这个数字在当时的游戏市场简直是天文数字。玩家们为了获得更流畅的帧率和更精美的画面,开始疯狂地升级自己的电脑,而其中最关键的部件,就是那块决定图形性能的显示卡。
市场的嗅觉是最灵敏的。在那个群雄逐鹿的年代,大大小小的图形芯片公司如雨后春笋般涌现,其中最耀眼的明星当属3dfx Interactive公司。这家由前硅谷图形工程师创立的公司,推出了一款名为Voodoo的专用3D加速卡,它能够在游戏中实现前所未有的纹理映射和光影效果。一时间,几乎所有追求画质的游戏玩家都把3dfx视为心中的圣地,而Voodoo卡则成了畅玩3D游戏的必备神器。紧随其后的是来自加拿大的Matrox、以色列的S3、台湾的SiS,以及无数其他品牌的图形芯片制造商,它们在争夺市场份额的战争中各显神通,刀光剑影,刀刀见血。
就是在这样一个竞争白热化的市场中,黄仁勋与克里斯·马拉科夫斯基和柯蒂斯·普里姆这两位志同道合的伙伴,决定创办自己的公司。马拉科夫斯基是黄仁勋在LSI Logic的同事,曾在Sun Microsystems公司担任软件工程师;普里姆则来自半导体行业的老牌劲旅AMD,拥有丰富的芯片设计经验。三个人各有所长:黄仁勋负责整体的战略方向和商业运营,马拉科夫斯基专注于软件开发,而普里姆则挑起了硬件设计的大梁。1993年1月,英伟达(NVIDIA)正式成立,公司名字来源于vision(视觉)和om(随机存取存储器的前缀),寓意着这家公司将在视觉计算领域开辟一片新天地。
创业初期的日子并不好过。英伟达最初的办公地点是加州桑尼维尔的一间小车库,条件简陋得让人想起硅谷那些伟大的创业神话。但与那些动辄在咖啡馆里头脑风暴的创业者不同,黄仁勋和他的团队选择了更为务实的路线——先做出产品,再谈理想。他们最初的目标是开发一款能够同时处理2D图形和3D渲染的集成芯片,这个想法在今天看来可能并不稀奇,但在当时却是一项颇具前瞻性的创新。因为当时的大多数图形芯片公司,要么专注于2D市场,要么专注于3D市场,几乎没有人尝试过将两者整合在一起。
1995年,英伟达推出了他们的第一款产品——NV1芯片。这是一款在当时看来颇具野心的产品,它不仅集成了2D图形加速器和3D渲染引擎,还创新性地加入了对声音处理和输入输出控制的功能,意图成为一块真正意义上的“多媒体处理器”。为了推广这款芯片,英伟达甚至与当时著名的游戏发行商世嘉建立了合作关系,试图将NV1芯片集成到世嘉的游戏主机中。
然而,理想很丰满,现实很骨感。NV1芯片遭遇了市场的冷遇。它的架构设计过于复杂,导致生产成本居高不下;同时,由于采用了非标准的接口设计,NV1与当时主流的软件和游戏存在兼容性问题。消费者和游戏开发商们对这款“什么都想做”的芯片并不买账,他们更愿意选择那些专注于单一功能的产品。NV1的失败几乎让英伟达陷入绝境——公司不仅没有赚到钱,反而因为研发投入和市场推广而背负了沉重的财务压力。更糟糕的是,在那个图形芯片市场已经杀红眼的年代,失败的代价往往意味着出局。3dfx、Matrox、S3这些竞争对手虎视眈眈,它们有能力也有意愿将任何一个弱小的挑战者挤出市场。
黄仁勋后来回忆说,那段时期是他职业生涯中最艰难的时刻。NV1的失败让公司损失了大量资金和信誉,投资者们开始质疑这个年轻公司的未来,员工们也人心惶惶,不知道明天会不会就是失业的开始。但正是在这种至暗时刻,黄仁勋展现出了他日后被称为“核弹教父”的特质——面对困难,他选择了果断调整方向,而不是固执己见或轻言放弃。
1995年末,英伟达推出了RIVA 128芯片,这是一款与NV1截然不同的产品。如果说NV1是黄仁勋理想主义情怀的产物,那么RIVA 128就是他商业智慧觉醒的标志。RIVA 128放弃了NV1那些华而不实的功能,专注于当时市场最迫切的需求——高性能的3D图形渲染。它采用了一种简洁而高效的架构设计,能够在保证画质的前提下提供流畅的帧率。更重要的是,RIVA 128严格遵循了微软的DirectX图形接口标准,这意味着它可以无缝兼容当时几乎所有的Windows游戏和应用软件。
RIVA 128一经推出,便获得了市场的热烈欢迎。虽然它的性能在当时的3D加速卡中并不是最顶尖的,但它的高性价比和出色的兼容性使其迅速成为OEM厂商和消费者的首选。英伟达终于挖到了创业以来的第一桶金,公司也从濒临死亡的边缘被拉了回来。1997年,英伟达趁热打铁推出了RIVA 128的升级版——RIVA TNT,这款芯片首次引入了“寄存器组合”架构,可以在单个渲染周期内处理更多的像素和纹理数据,性能相比前辈有了质的飞跃,一举超越了包括3dfx Voodoo在内的众多竞争对手,成为当时图形芯片市场的性能标杆。
英伟达的起死回生,让整个硅谷为之侧目。那些曾经嘲笑NV1失败的人,开始重新审视这家不起眼的小公司;而黄仁勋本人,也凭借着在危机中展现出的决断力和学习能力,逐渐在行业内树立起了自己的声望。但更重要的是,RIVA系列芯片的成功,让黄仁勋意识到一个至关重要的商业真理——在芯片行业,生态系统的力量远比单兵作战强大。英伟达之所以能够反败为胜,关键因素之一就是它选择了站在微软DirectX这个巨人的肩膀上,而不是试图另起炉灶建立自己的标准。从那时起,“拥抱生态”就成了英伟达最核心的产品策略之一,而这个策略在此后的岁月里被反复验证,最终将英伟达推向了这个时代的巅峰。
当我们回顾英伟达的这段创业历程时,一个最根本的问题浮现出来:为什么图形处理需要专门的芯片?为什么不能像之前的几十年那样,继续用CPU来处理所有的计算任务?这个问题看似简单,却触及了现代计算架构最核心的设计哲学,也是理解为什么GPU(图形处理单元)最终能够从一个小众的游戏配件,成长为驱动整个人工智能革命的算力引擎。
要回答这个问题,我们首先要理解CPU的设计理念。CPU,即中央处理器,是计算机的大脑,它的诞生可以追溯到上世纪六十年代。从本质上讲,CPU是一种“通用计算”设备,它被设计用来执行各种不同的任务——从运行操作系统和办公软件,到进行科学计算和数据分析。CPU的核心设计哲学是“顺序执行”和“多功能”。为了实现这些目标,CPU配备了复杂的控制逻辑和分支预测机制,能够快速地在不同的任务之间切换,同时还拥有大容量的一级、二级缓存,以减少访问主内存的延迟。
现代CPU通常采用“流水线”架构,将一条指令的执行过程分解成多个阶段——取指、译码、执行、访存、写回——并让这些阶段并行工作,这样就可以在同一个时钟周期内同时处理多条指令的不同阶段,大大提高了指令的吞吐率。为了让流水线保持满载,CPU还配备了分支预测器,试图猜测程序下一步要执行哪条指令,从而提前预取相应的代码。此外,现代CPU还支持“乱序执行”,即在保持程序最终结果正确的前提下,让指令按照不同于程序顺序的方式执行,以充分利用指令之间的数据依赖关系。这些复杂的技术让CPU成为了计算机领域最精密的机器之一,也是人类工程智慧的结晶。
然而,CPU的这些设计特性,也给它带来了一个根本性的局限——当CPU执行一个需要大量类似计算的任务时,它的控制逻辑和分支预测机制反而会成为拖累。想象一下,如果我们要计算一百万个三角形的坐标变换,需要对每一个顶点进行矩阵乘法运算。矩阵乘法涉及大量的浮点乘法和加法,而这些运算之间存在着严格的数据依赖关系——每一个结果都需要等待前一个结果计算完成后才能开始。这种情况下,CPU的乱序执行和分支预测能力几乎没有用武之地,它只能老老实实地一条指令一条指令地执行,而这些指令中的绝大部分时间,都花在了简单的数学运算上。
这正是GPU诞生的背景。GPU的设计目标与CPU截然相反——它不是为了通用计算而设计的,而是专门为了解决一类特定的问题:大规模并行计算中的图形渲染。让我们以最常见的3D游戏为例,来看看GPU是如何工作的。在一个3D游戏中,画面是由无数个微小的三角形构成的,每一个三角形都有三个顶点,每个顶点都有自己的三维坐标、颜色、纹理坐标等信息。为了将这些三维模型投影到二维屏幕上,并添加光照、阴影、纹理等效果,GPU需要对每一个顶点、每一条边、每一个像素进行大量的数学运算。
以一个分辨率为1920×1080的显示器为例,它包含大约207万个像素。如果游戏开启了抗锯齿功能,这个数字还会翻倍甚至更多。假设游戏每秒钟要渲染60帧画面,那就意味着GPU每秒钟需要处理超过1.2亿个像素。而每一个像素的颜色计算,可能涉及到多次纹理采样、光照计算、深度测试等操作,每一种操作都包含大量的数学运算。这就是为什么图形渲染被称为“计算密集型”任务——它需要处理的数据量是如此之巨大,以至于传统的CPU根本无法胜任。
为了解决这个难题,GPU采用了与CPU完全不同的设计哲学。GPU的核心思想是“牺牲灵活性换取性能”,它放弃了CPU那种复杂的控制逻辑和分支预测机制,转而将大量的算术逻辑单元(ALU)紧密排列在一起,形成一种被称为“流处理器”或“渲染管线”的并行计算架构。以英伟达早期GPU为例,RIVA 128芯片内部集成了大约100万个晶体管,其中绝大部分都被用作了图形处理专用的硬件电路。相比之下,同一时期的英特尔奔腾Pro处理器拥有550万个晶体管,但其中相当一部分被用在了缓存和控制逻辑上,真正用于浮点运算的单元反而不如GPU多。
GPU的工作方式也很有特点。与CPU按照程序的逻辑顺序一条一条地执行指令不同,GPU更适合执行一种被称为“单指令多数据”(SIMD)的并行计算模式。在SIMD模式下,成千上万个计算单元同时执行相同的指令,但处理的是不同的数据。比如,当我们要对一张图片的所有像素进行颜色调整时,GPU可以同时对所有像素执行“颜色值乘以1.5”这个操作,而不需要像CPU那样一个像素一个像素地处理。这种并行计算模式在图形渲染中极为常见,因为渲染过程中的大部分操作——如光照计算、纹理采样、颜色混合等——都是对海量的顶点和像素独立进行的,非常适合用SIMD的方式加速。
GPU的另一个关键特性是它对浮点运算的原生支持。在科学计算和图形渲染中,浮点数是最常用的数据类型。无论是三维坐标、颜色值还是光照强度,都需要用浮点数来表示。传统的CPU虽然也支持浮点运算,但它的浮点单元是作为协处理器存在的,数据需要在整数单元和浮点单元之间来回传输,这会引入额外的延迟。而GPU从一开始就将浮点运算作为核心功能,它的每一个渲染管线都配备了专门的浮点单元,可以在一个时钟周期内完成一次完整的浮点运算。这种设计让GPU在处理图形相关的计算任务时,能够展现出远超CPU的效率。
然而,GPU这种专用化的设计,也给它带来了一个显著的缺点——它的编程模型非常复杂,而且与CPU的编程模型截然不同。在CPU上,程序员可以像写普通的顺序程序那样编写代码,编译器会负责将代码转换成高效的机器指令。而在GPU上,程序员必须使用专门的图形API(如OpenGL或Direct3D)来描述要渲染的场景,还必须考虑并行计算的同步问题、显存的管理问题、以及如何将计算任务分配到大量的流处理器上。这些复杂的编程要求,让GPU在诞生后的很长一段时间里,都只能被视为一种小众的专业设备,只有那些掌握图形学知识的程序员才能驾驭它。
这种状况一直持续到2006年,直到英伟达推出了CUDA(Compute Unified Device Architecture,统一计算设备架构)平台。CUDA的革命性意义在于,它第一次为GPU提供了一种通用的并行计算编程模型。程序员可以使用标准的C语言来编写GPU程序,而不需要学习复杂的图形API;CUDA运行时系统会自动处理并行计算的调度、同步和内存管理等问题。这意味着,原本只能用来渲染游戏的GPU,现在可以被用来执行任何可以并行化的计算任务——从科学模拟到数据挖掘,从密码破译到生物信息学。
CUDA的诞生,标志着GPU从一个“图形专用芯片”向“通用并行计算平台”的蜕变,也为后来人工智能的爆发式发展埋下了伏笔。当然,这些都是后话了。在1995年的那个时间节点上,英伟达的RIVA 128芯片还只是一款纯粹的游戏显卡,它的设计目标就是让玩家们能够在Windows系统上流畅地运行3D游戏。但正是这款不起眼的产品,让英伟达在残酷的市场竞争中存活了下来,并积累了在图形处理领域宝贵的经验和技术储备。没有RIVA 128,就没有后来的GeForce系列;没有GeForce系列,就不会有CUDA;而没有CUDA,人工智能的革命或许还要再推迟几十年。
让我们把时间拨回到1995年,重新审视一下那个风起云涌的图形芯片战场。RIVA 128的成功,不仅让英伟达起死回生,也让整个行业开始重新思考图形芯片的发展方向。当时的竞争格局是:3dfx凭借Voodoo系列在高端3D游戏市场占据霸主地位,它们的加速卡被视为发烧级玩家的标配;Matrox和S3则在2D图形市场深耕细作,牢牢把控着商业图形应用的基本盘;而像SiS和Trident这样的二三线厂商,则在争夺对价格敏感的入门级市场。
英伟达的策略是精准的——它避开了与3dfx在高端市场的正面冲突,转而主攻性价比市场。RIVA 128和RIVA TNT虽然不是当时性能最强的3D加速卡,但它们的价格更加亲民,而且兼容性好、维护成本低,非常适合那些追求“够用就好”的普通消费者和OEM电脑厂商。此外,英伟达还与微软建立了紧密的合作关系,成为DirectX标准的主要支持者之一。这种“站在巨人肩膀上”的策略,让英伟达能够借助Windows操作系统的普及东风,将自己的芯片推广到千家万户。
1999年,英伟达推出了具有里程碑意义的GeForce 256,这是世界上第一款被正式冠以“GPU”名称的图形处理芯片。GeForce 256不仅在性能上全面超越了竞争对手,还首次引入了“几何变形与光照引擎”(Transform and Lighting,T&L)的概念。在之前的3D图形系统中,T&L计算通常是由CPU来完成的,这不仅消耗了大量的处理器资源,还限制了能够同时渲染的多边形数量。GeForce 256将T&L引擎直接集成到了GPU硬件中,可以在不影响CPU性能的情况下,实现更加复杂和精细的光照效果。GeForce 256的推出,标志着GPU作为一个独立于CPU的运算单元,正式登上了历史舞台。
从NV1的失败到RIVA 128的成功,从RIVA TNT的逆袭到GeForce 256的里程碑,英伟达在短短几年间完成了从濒临破产到行业新贵的蜕变。这个过程中,黄仁勋展现出的企业家精神值得后人学习。首先是不惧失败的勇气——NV1的失败足以让任何一家初创公司一蹶不振,但黄仁勋没有被这次挫折打倒,而是从中吸取教训,迅速调整了产品策略。其次是敏锐的市场洞察力——他准确地判断出“兼容DirectX”和“高性价比”才是当时市场的痛点,而不是单纯地追求性能领先。最后是坚持长期主义的定力——即使在最难熬的日子里,黄仁勋也没有放弃对图形处理技术的投入,因为他坚信视觉计算的未来一定无比光明。
黄仁勋的赌注最终得到了回报。进入21世纪后,随着个人电脑的进一步普及和3D游戏的蓬勃发展,图形芯片市场迎来了爆发式增长。英伟达凭借GeForce系列产品,在消费级图形市场站稳了脚跟,与ATI(后被AMD收购)形成了双寡头垄断的格局。与此同时,GPU的并行计算能力也开始被科学界和商业界所关注,各种基于GPU的高性能计算应用如雨后春笋般涌现。但真正让GPU的价值得到充分释放的,是几年后人工智能浪潮的到来——而这,将是本书后续章节要详细讲述的故事。
在结束本章之前,让我们再次回顾一下GPU与CPU的本质区别,用一个更加直观的比喻来帮助读者理解这两者的不同。如果把CPU比作一位精通多国语言的全能翻译官,那么GPU就像是一支由成百上千名只懂一门语言的普通员工组成的流水线团队。翻译官能够处理各种复杂的、跨领域的翻译任务,他可以今天翻译文学作品,明天翻译法律文件,后天翻译技术论文。但当他面对一个需要翻译一百万份简单问候语的任务时,他的效率反而不如那支流水线的普通员工团队——因为每一位员工只需要机械地重复同样的翻译工作,而翻译官却要不断地在不同的语言规则和文化背景之间切换。
这个比喻揭示了并行计算最核心的洞察:不是所有的计算任务都是一样的。有些任务需要复杂的逻辑判断和灵活的数据访问,这类任务更适合用CPU来处理;有些任务则需要对海量的数据进行简单但重复的计算,这类任务交给GPU会更加高效。当这两种任务结合在一起时——比如在人工智能的深度学习训练中,既需要对海量的图片或文本数据进行卷积、矩阵乘法等简单运算,又需要进行复杂的反向传播和梯度更新——CPU和GPU的组合就能发挥出"1+1>2"的效果。
从1993年那家不起眼的加州餐厅出发,英伟达走过了一条充满荆棘但也充满荣耀的道路。NV1的失败、RIVA系列的崛起、GeForce的辉煌、CUDA的创新、GPU计算的跨界、人工智能时代的统治——每一个里程碑都是黄仁勋和英伟达人用智慧和汗水铸就的。而这一切的起点,都可以追溯到那个夜晚,三位怀揣梦想的年轻人围坐在餐桌旁,开始畅想一个由绚丽的图形和强大的算力构成的未来世界。
那个未来,已经在我们眼前徐徐展开。
在接下来的章节中,我们将继续追踪英伟达的成长轨迹,探寻GPU技术如何一步步从游戏显卡蜕变为算力之王。我们将见证CUDA生态系统的诞生和发展,了解GPU计算如何渗透到科学研究的各个领域;我们将亲历2012年那场改变人工智能发展轨迹的ImageNet竞赛,看Geoffrey Hinton的学生们如何用两块GeForce GTX 580显卡训练出震惊世界的AlexNet模型;我们还将探讨在ChatGPT掀起的大语言模型浪潮中,GPU如何成为了训练和部署这些庞大模型的必备基础设施,以及英伟达如何凭借先发优势和生态壁垒,在这场算力竞赛中一骑绝尘。
算力的觉醒,正在改变这个世界的每一个角落。而这场革命的种子,早在1993年那个硅谷的夜晚,就已经被悄悄埋下。
#