DEV Community

cognitalk
cognitalk

Posted on Edited on

Turing Award Winner(David Patterson): The Difference Between a CPU, GPU, and TPU | GPU 和 TPU 的本质区别


https://www.youtube.com/watch?v=fsnKZQA4aZ0

这段视频是图灵奖得主、计算机体系结构泰斗大卫·帕 Patterson(David Patterson)接受访谈的内容,核心讨论了 CPU、GPU 和 TPU 的本质区别、各自的发展历程,以及它们在人工智能时代的定位。

以下是访谈的主要内容梳理:

1. CPU(中央处理器):通用计算的基石

  • 设计特点:CPU 是高度通用的处理器。现代 CPU 通常有几十个到上百个核心,其核心指令集设计延续了数十年的演进路线,属于标准的“通用架构”。
  • 适用场景:它依然是不可或缺的角色,主要负责操作系统、编译器、各种通用控制逻辑以及复杂的分支跳转任务。

2. GPU(图形处理器):从图形渲染到并行加速

  • 设计特点:GPU 最初是为了满足图形渲染需求而设计的,采用的是多线程架构。当一个硬件线程发出内存请求时,硬件会迅速切换去执行其他任务,以此掩盖内存延迟。
  • 浮点数精度:图形处理对高精度浮点数的依赖较小,通常使用 16 位或 32 位浮点数即可。
  • 转向 AI 的转折点:
  • 2006 年,英伟达 CEO 黄仁勋推动开发了 CUDA 编程语言,让开发者能够用类 C 语言更方便地操控这种多线程并行架构,从而打破了其纯粹作为图形加速卡的局限。
  • 2012 年的 ImageNet 图像识别竞赛中,AlexNet 凭借在 GPU 上运行深度神经网络大获全胜。由于 GPU 具备极强的单精度浮点计算能力,AI 领域随后迅速全面转向了 GPU。

3. TPU(张量处理器):为 AI 而生的专用加速器

  • 设计特点:谷歌在设计 TPU 时采取了“白板起步”(Clean Slate)策略,完全不考虑图形渲染,直奔神经网络的核心——矩阵乘法(Matrix Multiply)。
  • 架构创新:
  • 去除了硬件缓存:传统的通用处理器为了弥补内存延迟会设计三级缓存,而 TPU 因为其内存访问模式在软件层面是完全可预测的,所以直接去掉了复杂的硬件缓存,改由软件精细调度。
  • 发明 BF16 浮点格式:传统科学计算高度依赖 64 位双精度浮点数。谷歌的 Brain 研究团队意识到 AI 并不需要那么高的精度,更需要“数值范围”,于是推出了脑浮点格式(Brain Float 16 / BF16),将指数位做大、分数位缩窄。

  • 冲击力:这种极致的领域专用(Domain-Specific)设计让 TPU 在推理时的性能比同期的 GPU 快上数倍甚至数十倍,直接震动了整个芯片行业,促使英特尔、英伟达以及各大云厂商纷纷加码 AI 芯片研发。

4. 为什么需要架构分工?(摩尔定律放缓的背景)

  • 大卫·帕 Patterson 指出,如果当年摩尔定律和登纳德缩放比例定律(Dennard Scaling)没有失效,我们今天可能已经用上 100 太赫兹(THz)的通用 CPU 处理器,GPU 也许依然只会是个小众产品。
  • 然而,CPU 的主频在 2005 年前后就遇到了瓶颈(停留在 2~3 GHz 左右),单核性能无法继续靠物理工艺暴增。
  • 因此,计算走向了专用化(Specialization)的道路。虽然 CPU 依然是管理系统必不可少的“总指挥”,但整个行业(包括资金和人才)的重心已经彻底转向了 AI 加速器。


GPU与TPU的区别一句话通俗总纲

GPU:通用并行计算机器,本来是画图的,靠一大堆小计算核心抢时间;TPU:专用矩阵乘法机器,生来只干神经网络最核心的张量运算,砍掉一切不需要的电路来堆效率。
两者能加速神经网络,根源是:深度神经网络90%以上的计算,本质就是大量矩阵乘(张量乘),刚好都能拆成超多独立的乘法加法一起算——天然适合并行。

下面顺着你写的内容,用大白话再梳理+补清楚核心差异,修正几个容易踩坑的小误区:

1. GPU 理解:一大群灵活的小工人

CPU 像少数几个超级聪明、什么活都能干的老师傅,一次只能干几件事;
GPU 是几千上万个简单工人。
最早任务:渲染画面。一张图几百万像素,每个像素的光照、颜色计算互相独立,完全可以大家分头同时算。

它的核心机制(你写的线程切换掩蔽延迟)通俗版:
工人去仓库拿数据的时候很慢(内存延迟),GPU 不闲着:这个工人等数据,调度器马上安排另一个工人先干活。靠大量线程切换,把“等内存”的空窗填上。

✅ 优点:通用。这些小工人什么并行活都能做:图形渲染、矩阵乘、仿真、视频编码、挖矿、训练大模型都行。CUDA 就是给这些工人一套统一的指挥语言,让程序员不用画图,直接派它算数学。
✅ 精度:原生擅长 FP32、FP16;后来英伟达才跟上 BF16、FP8。
⚠️ 代价:
为了通用,它带了很多复杂电路:指令解码、硬件缓存、分支判断单元、各种各样的控制逻辑。很多电路,跑神经网络矩阵乘法的时候是闲置的,属于“兼容开销”。

所以 GPU 是:什么并行活都接,但是做矩阵乘法这件事,不是最精简的硬件。

AlexNet 一战成名的逻辑:当年大家都用 CPU 跑网络,GPU 海量小核心并行算卷积(卷积本质可以转成矩阵乘法),直接碾压 CPU。

2. TPU 理解:专门造的矩阵乘法流水线工厂

谷歌一开始就想:神经网络绝大多数计算,就是反复 A矩阵 × B矩阵,别的活很少。那我不要通用工人,直接造一条专门批量做乘加(MAC,乘累加)的流水线。

矩阵乘法 = 一堆乘法,结果再加起来,也就是 MAC 操作。TPU 最核心硬件就是巨大的 MAC 阵列(脉动阵列 systolic array),这是 GPU 没有的核心结构!
脉动阵列通俗比喻:像传送带。数据顺着阵列一步步流动,每经过一个单元就完成一次乘加,数据边走边算,不用反复来回搬运读写。

你原文两点重点,通俗解释:

  1. 去掉复杂硬件缓存,交给软件调度
    GPU 靠硬件缓存自动预判你接下来要用什么数据,适配各种乱七八糟随机的内存访问;
    TPU 跑神经网络的时候,数据读取顺序是固定、可预测的(矩阵乘的访问模式很规律)。硬件不用花晶体管做自动缓存,换由编译器/软件提前排好数据流顺序,省下的晶体管全部堆 MAC 计算单元。

    不是 TPU 没有内存,是没有通用的硬件缓存体系。

  2. BF16 不是为了省速度,是抓准神经网络的数值特点
    64位双精度:小数精度极高,但指数范围很小,AI 不需要;
    FP16:尾数多、指数位少,很容易溢出;
    BF16:保留和 FP32 一样大的指数范围,砍掉小数尾数。神经网络对小数细微误差不敏感,但很怕数值溢出。BF16 用很小的位宽,保住了AI最需要的动态范围。

✅ TPU 的代价:不灵活
这套脉动阵列,跑矩阵乘极强;但遇到分支判断、不规则计算、随机算法,它就很别扭。它是领域专用芯片(DSA),不是通用并行芯片。老一代TPU甚至很难用来训练,主打推理;后面几代TPU才慢慢补齐训练能力。

3. 最核心本质区别(浓缩版)

  • GPU:通用多核心并行处理器,硬件设计目标是“高效执行任意并行程序”,矩阵乘法只是它支持的其中一类任务。靠大量线程隐藏内存延迟。
  • TPU:基于脉动阵列的张量专用加速器,硬件架构直接围绕“矩阵乘/乘加数据流”设计,优先优化数据流搬运,砍掉通用控制开销,最大化MAC密度。

4. 回答你的问题:为啥两个都能加速神经网络?

神经网络(卷积、Transformer注意力、全连接层)计算主体:海量独立的乘加运算

  • 对 GPU:把矩阵乘法拆成无数独立小任务,扔给成千上万小核心并行跑,靠多线程掩盖等数据的时间;
  • 对 TPU:把矩阵乘法喂进脉动阵列,数据在阵列里流水式流动,连续不断做乘加,最小化数据来回搬运开销。

类比:
同样是打包快递(矩阵乘)
GPU = 一大群临时工,每个人都有全套工具,除了打包,也能分拣、贴单、搬货;但是每个人都有一套额外工具,占地方。
TPU = 一条全自动打包流水线,整条线只设计用来打包,速度极高;让它干分拣、贴单就很麻烦。

补充两个常见容易混淆的点(给你原文做升级)

  1. 不是 TPU 天然一定比 GPU 快:要看场景。固定推理 workload、大矩阵、规整模型,TPU 优势巨大;模型有很多不规则算子、分支、动态shape,GPU 的通用性反而更稳。
  2. 现代英伟达 GPU(A100/H100)也加了 Tensor Core(张量核),本质就是在 GPU 里面塞了小型脉动阵列,专门加速矩阵乘。相当于 GPU 里面内置了一小块“TPU风格硬件”,用来弥补原生矩阵乘法效率短板,这也是两边互相借鉴的结果。

Top comments (0)