首届AICon深圳正式启动|AI实践哪家强?来 AICon,解锁技术前沿,探寻产业新机! 了解详情
写点什么

GPU 这么厉害,我们为什么还要用 CPU?

  • 2025-03-03
    北京
  • 本文字数:2445 字

    阅读完需:约 8 分钟

大小:1.02M时长:05:56
GPU 这么厉害,我们为什么还要用 CPU?

最近,Twitter 上出现了一段 2009 年的老视频。它让观众可以直观地了解 CPU 和 GPU 之间的区别。


原始视频在此,时长 90 秒:https://youtu.be/-P28LKWTzrI


在这个视频中,CPU 和 GPU 两种处理器在一场绘画对决中正面交锋。两种处理器先后连接到了一台发射彩弹来作画的机器上,通过射击到屏幕上的彩蛋来绘制图像。


CPU 需要整整 30 秒才能画出一个非常基本的笑脸:



然后 GPU 瞬间就能画出一幅蒙娜丽莎的图像:



单纯从这段视频中可以得出一个结论:CPU 速度很慢,GPU 速度很快。虽然这是事实,但视频中并没有提到两种处理器的很多细微差别。


每秒万亿次浮点运算(TFLOPS)


当我们说 GPU 的性能比 CPU 高得多时,我们指的是一种称为 TFLOPS 的测量方法,它本质上是衡量处理器在一秒钟内可以执行多少万亿次数学运算。例如,Nvidia A100 GPU 可以执行 9.7 TFLOPS(每秒 9.7 万亿次浮点操作),而最新一代的 Intel 24 核处理器可以执行 0.33 TFLOPS。这意味着中等水平的 GPU 至少比最强大的 CPU 快 30 倍。


但我的 MacBook(苹果 M3 芯片)中的芯片同时包含了一个 CPU 和一个 GPU。为什么?我们不能放弃这些非常慢的 CPU 吗?

不同类型的程序


让我们定义两种类型的程序:顺序程序和并行程序。

顺序程序


顺序程序指的是所有指令都必须一个接一个运行的程序。以下是一个例子。


def sequential_calculation():    a = 0     b = 1        for _ in range(100):            a, b = b, a + b        return b
复制代码


在这里,我们连续 100 次使用前两个数字来计算下一个数字。这个程序的一个重要特征是每个步骤都依赖于它之前的两个步骤。如果你手动做这个计算的话,你不能告诉朋友,“你计算第 51 步到第 100 步,而我从第 1 步开始”,因为他们需要第 49 步和第 50 步的结果才能开始计算第 51 步。每个步骤都需要知道序列中的前两个数字。

并行程序


并行程序是可以同时执行多个指令的程序,因为它们不依赖于彼此的结果。以下是一个例子:


def parallel_multiply():    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]    results = []        for n in numbers:        results.append(n * 2)
return results
复制代码


在这个例子中,我们进行了 10 次完全独立的乘法运算。这里重要的是顺序无关紧要。如果你想和朋友分担工作,你可以说:“你乘奇数,我乘偶数。”你们可以分开工作,也可以同时工作,并得到准确的结果。


错误的二分法


实际上,这种划分是一种错误的二分法。大多数大型真实应用程序都混合了顺序和并行代码。事实上,每个程序都会有一定比例的指令是可并行化的。


例如,假设我们有一个运行 20 次计算的程序。前 10 个是斐波那契数,必须按顺序计算,但后 10 个计算可以并行运行。我们会说这个程序是“50% 可并行化的”,因为一半的指令可以独立完成。为了说明这一点:


def half_parallelizeable():    # Part 1: Sequential Fibonacci calculation    a, b = 0, 1    fibonacci_list = [a, b]    for _ in range(8):  # Calculate 8 more numbers        a, b = b, a + b        fibonacci_list.append(b)
# Part 2: Each step is independent parallel_results = [] for n in fibonacci_list: parallel_results.append(n * 2) return fibonacci_list, parallel_results
复制代码


前半部分必须是连续的——每个斐波那契数都取决于它前面的两个数。但后半部分可以采用完整的列表并独立地将每个数字加倍。


如果不先计算第 6 和第 7 个数,你就无法计算第 8 个斐波那契数,但一旦有了完整的序列,你就可以将加倍操作分配给尽可能多的可用工作器。


不同程序类型适合不同的处理器


广义上讲,CPU 更适合顺序程序,而 GPU 更适合并行程序。这是因为 CPU 和 GPU 之间存在根本的设计差异。


CPU 具有少量较大的核心(苹果 M3 具有 8 核 CPU),而 GPU 有许多小的核心(Nvidia 的 H100 GPU 有数千个核心)。


这就是 GPU 擅长运行高度并行的程序的原因——它们有数千个简单核心,可以同时对不同的数据执行相同的操作。


渲染视频游戏图形是一种需要进行许多简单重复计算的应用程序。想象一下你的视频游戏屏幕是一个巨大的像素矩阵。当你突然将角色向右转动时,所有这些像素都需要重新计算为新的颜色值。所幸屏幕顶部像素的计算与屏幕底部像素的计算是独立的。因此,计算可以分散到数千个 GPU 核心上。这就是 GPU 对游戏如此重要的原因所在。

CPU 擅长处理随机事件


在高度并行的任务(例如将 10,000 个独立数字的矩阵相乘)方面,CPU 比 GPU 慢得多。但是,它们擅长复杂的顺序处理和复杂的决策。


将 CPU 核心想象成繁忙餐厅厨房里的主厨。这位厨师可以:


  • 当有特殊饮食要求的 VIP 客人到来时,立即调整烹饪计划

  • 在准备精致酱汁和检查烤蔬菜之间无缝切换

  • 通过重新组织整个厨房工作流程来处理停电等意外情况

  • 安排多道菜的烹饪过程,让它们在恰当的时刻热腾腾地送到

  • 在处理数十个完成状态各异的订单同时保持食物质量


相比之下,GPU 核心就像一百名擅长重复任务的流水线厨师——他们可以在两秒钟内切好洋葱,但无法有效地管理整个厨房。如果你要求 GPU 处理不断变化的晚餐服务需求,它会很吃力。


这就是为什么 CPU 对于运行计算机操作系统至关重要的原因所在。现代计算机面临着一系列不可预测的事件:应用程序启动和停止、网络连接断开、文件被访问以及用户在屏幕上随机点击。CPU 擅长处理所有这些任务,同时保持系统响应能力。它可以立即从帮助 Chrome 渲染网页切换到处理 Zoom 视频通话,再到处理新的 USB 设备连接——同时跟踪系统资源并确保每个应用程序都得到应有的关注。


因此,虽然 GPU 擅长并行处理,但 CPU 仍然因其处理复杂逻辑和适应不断变化的条件的独特能力而保持着不可或缺的地位。像苹果 M3 这样的现代芯片兼具两者:将 CPU 灵活性与 GPU 计算能力相结合在一起。


事实上,能够更准确反映实际情况的绘画工作对比视频会显示出 CPU 管理图像的下载和内存分配工作,然后再调度 GPU 快速渲染像素。


原文链接:https://codingstuff.substack.com/p/if-gpus-are-so-good-why-do-we-still

2025-03-03 17:126848

评论

发布
暂无评论

HarmonyOS Codelabs最新参考

坚果

OpenHarmony 三周年连更

行业分析| 视频监控——AI自动巡检

anyRTC开发者

人工智能 音视频 视频监控 自动巡检

如何开发一个小程序自定义组件

Onegun

小程序 前端 小程序组件

面试还不懂JVM性能调优,看这篇文章就够了!

程序员小毕

程序员 面试 后端 JVM jvm调优

iOS MachineLearning 系列(4)—— 静态图像分析之物体识别与分类

珲少

九科信息流程挖掘产品bit-Miner即将开放面向对象流程挖掘能力

九科Ninetech

流程挖掘

手势识别:让你的手成为计算机的新界面

数据堂

烟雾弹?突然转变?如何看待微软发声:中国是主要的对手

加入高科技仿生人

人工智能 AI 数智化 ChatGPT

MegEngine 使用小技巧:量化

MegEngineBot

量化 MegEngine

乌合之众再次上演,打工人将被AI一键淘汰?

引迈信息

人工智能 AI 低代码 AIGC ChatGPT

中国垂直行业SaaS,这样走可能是新出路

ToB行业头条

走进社区客户端测试 | 得物技术

得物技术

测试

北大GPT解题有数学老师内味了,用人话讲难题,从高中数学到高数都能搞定

Openlab_cosmoplat

人工智能 开源社区

把“ai模型+低代码”应用在项目管理中,效率翻了好几倍

优秀

AI 低代码

让 AI 更简单 人工智能平台 SEAL 携手龙蜥落地达摩院算法能力 | 龙蜥案例

OpenAnolis小助手

开源 操作系统 SEAL 达摩院 龙蜥案例

构建云边端一体的分布式云架构,软硬结合驱动边缘计算创新场景

百度开发者中心

云计算 存储 边缘云

selenium源码通读·10 |webdriver/common/proxy.py-Proxy类分析

Python 测试 自动化测试 源码剖析 selenium

在企业内容城池边,它建立起一支保卫军

ToB行业头条

卷起来了!阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

收到请回复

架构 #编程 #微服务

视频大文件传输的演变:从“卷轴男孩”到自动化

镭速

向量嵌入:AutoGPT的幻觉解法?

OneFlow

知名直播App被苹果商店下架,或涉及侵权问题

曲多多(嗨翻屋)版权音乐

ios iphone 软件开发

一文带你了解 TypeScript 泛型

程序员海军

typescript 三周年连更

您有一份直播回放待查收!

BinTools图尔兹

直播回放 版本发布

提交代码「前置处理」,向前一小步,效率提升「亿点点」

极狐GitLab

DevOps 极狐GitLab git hook lefthook 代码前置

MobTech MobLink|引流统计一站式服务

MobTech袤博科技

深度分享 | API 测试经济学与 API First 践行

Apifox

程序员 前端 接口 后端 API

vue 入门知识点有哪些?

海拥(haiyong.site)

三周年连更

世界读书日特辑 | 华为阅读深耕精品书,让读书变得赏心“悦目”

最新动态

“精准测试” 在商家地址专项的探索 | 得物技术

得物技术

智慧园区数字转型下的移动App建设策略

Onegun

移动应用 智慧城市 智慧园区

GPU 这么厉害,我们为什么还要用 CPU?_芯片&算力_Teddy Wahle_InfoQ精选文章