工具实践

CUDA,本可以,本应该

·14 分钟阅读·— 次阅读

Wired专栏:英伟达如何用“护城河”淹没竞争对手

作者:Sheon Han 栏目:Machine Readable 栏目说明:一个关于编程的常设栏目。毕竟,万一机器接管世界,我们至少应该会说它们的语言。


请原谅我一上来就用一个陈词滥调——一个金融圈的术语。最近这个词已经悄悄溜进了科技行业的话语体系里。没错,我恐怕不得不谈谈“护城河”。

这个词几十年前由沃伦·巴菲特推广,用来指一家公司的竞争优势。后来,它又进入了硅谷创业公司的融资演示文稿。尤其是在一份据称从谷歌泄露出来、标题为《我们没有护城河,OpenAI 也没有》的备忘录里,这个词变得更有名了。那份备忘录担心,开源 AI 会攻破大科技公司的城堡。

几年过去了,城堡的墙依然安然无恙。除了 DeepSeek 刚出现时引发过一阵短暂恐慌之外,开源 AI 模型并没有大幅超越闭源模型。尽管如此,真正的前沿实验室——OpenAI、Anthropic、Google——其实都谈不上有什么护城河。

真正有护城河的公司,是英伟达。

英伟达 CEO 黄仁勋曾把这条护城河称为自己最珍贵的“宝藏”。你可能会以为,对一家芯片公司来说,这种宝藏应该是某种硬件。但并不是。它是一个叫 CUDA 的东西。这个名字听起来像某种被 FDA 禁用的化学化合物,但它可能才是 AI 领域真正的护城河。


从技术上讲,CUDA 是 Compute Unified Device Architecture 的缩写,也就是“统一计算设备架构”。不过,就像 laser 或 scuba 这些词一样,已经没人费心去展开它的全称了;大家直接说 “KOO-duh”。

那么,这个至关重要的宝藏到底有什么用?如果非要用一个词回答,那就是:并行化。

举个简单例子。假设我们让一台机器填写一张 9×9 的乘法表。如果用一台只有单核的电脑,全部 81 次运算就得老老实实一个接一个地执行。但如果是一块有 9 个核心的 GPU,它就可以分配任务,让每个核心负责一列:一个核心算 1×1 到 1×9,另一个核心算 2×1 到 2×9,以此类推。这样速度就能提升 9 倍。

现代 GPU 还能更聪明一点。比如,如果它被编程为识别乘法交换律——7×9 等于 9×7——它就可以避免重复劳动,把 81 次运算减少到 45 次,几乎把工作量砍半。要知道,当一次模型训练的成本高达 1 亿美元时,任何一点优化都值得计较。

英伟达的 GPU 最初是为了给电子游戏渲染图形而设计的。2000 年代初,斯坦福一位博士生 Ian Buck 发现,GPU 的架构其实可以被重新用于通用高性能计算。Buck 最早接触 GPU 是因为他自己也是游戏玩家。他后来创建了一种叫 Brook 的编程语言,随后被英伟达招入麾下,并与 John Nickolls 一起领导了 CUDA 的开发。

所以,如果 AI 真的开启了一个永久性的白领底层阶级时代,或者催生了自主武器时代,那么请记住,这一切可能都要归因于某个地方有人在玩《毁灭战士》时觉得:恶魔的阴囊应该以每秒 60 帧的速度抖动。


CUDA 本身并不是一门编程语言,而是一个“平台”。我用“平台”这个含糊的词,是因为它有点像《纽约时报》:表面上是一家报纸,但同时也是一家游戏公司。CUDA 这些年来也变成了一整套层层嵌套的软件库,尤其服务于 AI。

其中每一个函数,可能只是从某个单独的数学运算中抠出几纳秒的时间。但这些优化累计起来,就会让 GPU 用行业黑话来说——go brrr,也就是飞快地狂转起来。

一块现代显卡,并不只是塞满芯片、内存和风扇的电路板。它是一个复杂精巧的体系,里面有多级缓存结构,还有叫做“张量核心”和“流式多处理器”的专用单元。

从这个意义上说,芯片公司卖的东西有点像一间专业厨房。更多核心,就像更多烤炉工位。但即使一间厨房有 30 个烤炉工位,如果没有一个能干的主厨巧妙分配任务,它也不会自动跑得更快。而 CUDA 扮演的,正是这个给 GPU 核心分配任务的主厨角色。

继续这个比喻。那些针对某一种矩阵运算手工调优过的 CUDA 库,就像专门为单一任务设计的厨房工具:去樱桃核器、挑虾线器。对普通家庭厨师来说,这些东西可能显得有些奢侈;但如果你手头有 1 万只虾要去虾线,那就完全不是一回事了。

这就把我们带回了 DeepSeek。

DeepSeek 的工程师甚至钻到了这层已经很深的抽象之下,直接使用 PTX 编程。PTX 是一种面向英伟达 GPU 的汇编语言。

假设任务是剥蒜。一个没有优化的 GPU 会说:“用你的指甲把蒜皮抠下来。”CUDA 可以指示它:“用刀面把蒜瓣拍碎。”而 PTX 则允许你规定每一个子动作:“把刀面抬到砧板上方 2.35 英寸,使刀面与蒜瓣的赤道线平行,然后用 36.2 牛顿的力用手掌向下拍击。”

你现在大概能明白,为什么 CUDA 对英伟达如此有价值,也为什么别人这么难碰到它。

调优 GPU 性能是一个非常棘手的问题。你不能随便从旧金山 Market Street 上抓一个没什么经验的本科生,给他开一个 Claude Max 订阅,然后指望他就能写 GPU kernel。写到这个层级,是一项枯燥、艰苦、反复打磨的工作——除非你是 DeepSeek 那种一流程序员。


我先声明一下:在以前的 Machine Readable 专栏里,我分析的那些编程语言,都是我本来就熟悉的。但这次不是。为了维持这个专栏的标准,我决定花一天时间亲自试试 CUDA。

它毁了我的整个下午。

一个简单的矩阵乘法,在 PyTorch 这种流行的机器学习框架里,我通常只需要写三行代码。但用 CUDA 写,则需要 50 多行。事实证明,榨干最后一滴性能,是一件值得钦佩但极其乏味的事情。

我把脚趾伸进这条护城河里试了试,可以确认:它确实又深又吓人。

CUDA 的统治地位,不仅来自它生态系统本身的质量,也来自一种锁定效应。因为现代机器学习框架都建立在 CUDA 之上,而 CUDA 关键的一点是:它运行在英伟达芯片上。所以即使 AMD 的芯片在核心数和内存等纸面参数上更强,实际表现仍然可能不如英伟达。

只看参数表来比较芯片,就像只看气缸数量来比较赛车。真正的性能,只能上赛道测。

第二个声明:我原本想亲自对两块芯片做基准测试。但如果我试图报销一块英伟达 H100 和一块 AMD MI300X,大概会直接被康泰纳仕集团拉进黑名单。所以你们只能相信那些独立研究者的结论:即使 AMD 在纸面规格上更好,实测中仍然被英伟达压制。

英伟达在软件上的优势,可能在于一个对芯片公司来说很不寻常的事实:它雇佣的软件工程师,比硬件工程师还多。如果我是 AMD 的负责人,我可能也会照着做。当然,也没人问我就是了。


每一年,都会有新的挑战者试图抽干英伟达的护城河,结果最后反而淹死在里面。

OpenCL 是一个开放标准,背后有一个包括苹果、AMD 和高通在内的联盟支持。它有点像 CUDA 版 iOS 的一个“未竟的 Android”。但它几乎没有真正获得市场牵引力。

与此同时,AMD 对 CUDA 的回应叫 ROCm。这个名字甚至比 CUDA 还糟糕——它到底该怎么念?“rock cum” 吗?别急着多招程序员了,先换个营销团队吧。更糟的是,ROCm 一直被各种 bug 和兼容性问题困扰,以至于它的 subreddit 看起来像一个互助支持小组。

也别忘了英特尔。

我们很容易把英特尔当作一家正在失败的芯片公司一笔带过。但它最近几年的历史还说明了另一件事:它也是一家正在失败的软件公司。为了在相关性彻底消失前最后挣扎一下,英特尔推出了 oneAPI。但到了 2026 年,我们已经可以非常确定地说:CUDA 仍然稳坐王座。

如果还有什么挑战者值得一提,那可能是 Modular。它由 Chris Lattner 领导。Lattner 是传奇级编程语言设计师,苹果的 Swift 和 LLVM 都出自他手。

不过,这里面有一个公开的秘密:就像理论物理学家大多连轮胎都不会换一样,大多数 AI 研究者甚至连一行 C++ 都写不出来。真正优秀的 GPU kernel 工程师,在这个世界上少得可怜,而其中很多人都在英伟达工作。

早在 AI 研究者开始四处收割名望之前,这些工程师就已经默默无闻地在 CUDA 上辛勤工作了。即使是现在那些可靠的代码智能体,面对 kernel 代码时也依然步履蹒跚。

归根到底,英伟达也许更像苹果,而不是 AMD 或英特尔。

它之所以是一家伟大的硬件公司,恰恰是因为它也是一家软件公司。苹果对 Android 的护城河,从来不只是 iPhone 这台手机,而是整个生态系统:iOS、App Store,以及围绕它的开发者。

当然,你可以把一台三星 Galaxy 对折起来。但你真的想用 Samsung Pay 吗?

与此同时,整个行业还得继续忍受英伟达那令人冒犯的价格标签。

相关文章