GPU 和 CPU 的区别是什么?为什么挖矿、大模型都用 GPU?
一则或许对你有用的小广告
欢迎加入小哈的星球,你将获得:专属的实战项目(4个项目都能学) / 1v1 提问 / 简历修改 / Java 学习路线 / 社群讨论 / 学习打卡 / 每月赠书
《Spring AI 项目实战(问答机器人、RAG 智能客服、联网搜索)》已完结,基于
Spring AI + Spring Boot 3.x + JDK 21...,查看介绍《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,查看介绍;演示链接:http://116.62.199.48:7070/《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接:http://116.62.199.48/
新开坑项目:《从零手撸:秒杀系统高并发优化实战》 正在更新中...,查看介绍
截止目前,星球内专栏累计输出 150w+ 字,讲解图 5110+ 张,还在持续爆肝中.. 后续还会上新更多项目,已有 4700+ 小伙伴加入学习,欢迎点击围观
面试考察点
-
架构理解深度:面试官不仅仅是想知道 “GPU 核多 CPU 核少”,更是想知道你懂不懂两者在芯片设计哲学上的根本差异——为什么 CPU 不能堆成千上万个核?为什么 GPU 一个核这么弱?背后是 “延迟” 和 “吞吐” 两种设计取向的取舍。
-
并行计算认知:考察你是否理解什么样的任务适合 GPU,什么样的任务必须用 CPU。这直接决定你能不能在大模型训练、推理、数据并行这些场景里做出正确的技术选型。
-
场景迁移能力:挖矿和大模型看似是两个领域,但底层共性是 “海量重复计算”。面试官想看的是你能不能把这个共性抽象出来,而不是分别背两套答案。
核心答案
一句话总结:CPU 是 “几个老教授”,GPU 是 “几万个小学生”。 老教授能解微积分,但一次只能解一道题;小学生只会加减乘除,但一万个人同时算,总吞吐量吊打老教授。
| 对比维度 | CPU | GPU |
|---|---|---|
| 核心数量 | 几个 ~ 几十个(消费级最多 32 核左右) | 几千 ~ 几万个(如 RTX 4090 有 16384 个 CUDA Core) |
| 单核能力 | 极强(复杂逻辑、分支预测、乱序执行) | 弱(简单运算,注重吞吐) |
| 晶体管分配 | 约 30% ALU,70% 控制逻辑 + 缓存 | 约 90% ALU,10% 控制和缓存 |
| 设计目标 | 低延迟(尽快完成单个任务) | 高吞吐(同时处理海量任务) |
| 内存带宽 | DDR5 ~ 100 GB/s 级别 | HBM3 ~ 3 TB/s 级别(差一个数量级) |
| 擅长场景 | 操作系统调度、复杂业务逻辑、数据库、分支密集型 | 矩阵运算、图形渲染、哈希计算、神经网络训练 |
挖矿和大模型都是 “大规模、可并行、计算密集” 的任务,正好踩在 GPU 的设计甜区上。
深度解析
一、架构对比:晶体管怎么分配的
先把芯片的内部结构画出来,看一眼就懂了。
上图把两者的设计哲学摆得很清楚,我拆开讲:
-
CPU 的核心设计:单核里塞了大量控制单元——分支预测器、乱序执行引擎、深层流水线(15~20 级),还有动辄几十 MB 的多级缓存。这些都是为了让 “单个任务跑得尽可能快”。代价是占用了大量晶体管,留给算术单元(ALU)的不到 30%。
-
GPU 的核心设计:走的是另一个极端——把控制逻辑压到最简,缓存很小,把 90% 的晶体管都堆给了 ALU。一个 SM(Streaming Multiprocessor,流多处理器)里能塞 128 个甚至更多的 ALU,整张卡几千个 ALU 同时干活。单个 ALU 弱得一批,但架不住人多。
-
本质差异:CPU 追求 “把一件事做得飞快”(低延迟),GPU 追求 “同时做千万件事”(高吞吐)。这俩其实是互补的——CPU 当 “指挥官” 负责调度,GPU 当 “军队” 负责冲锋。
二、为什么挖矿要用 GPU
先说挖矿的本质。比特币挖矿(SHA-256 哈希)和早期以太坊挖矿(Ethash)的核心逻辑是:
不停地算哈希 → 算到一个满足难度的值 → 拿到记账权 → 获得奖励
关键点来了:每一次哈希计算之间是独立的。算第 N 次和算第 N+1 次,不需要任何依赖关系,可以同时跑几千万次。
这图想表达什么:挖矿就是 海量并行尝试,每个尝试是一次哈希运算,互不依赖。
- CPU 来挖:8 核 CPU 同时算 8 个哈希,每秒几千万次,电费都赚不回来。
- GPU 来挖:几千个 ALU 同时算,每秒几亿次哈希,效率是 CPU 的几十上百倍。
- 专用矿机(ASIC):更狠,直接把 SHA-256 算法硬件化,效率又比 GPU 高几个数量级。所以现在比特币挖矿早就 ASIC 化了,GPU 只在以太坊(Ethash 算法刻意反 ASIC)这类场景里吃香。
一句话:挖矿是 “算力竞赛”,谁的并行吞吐高谁就赢,CPU 这种 “少而精” 的架构天然吃亏。
三、为什么大模型都用 GPU
大模型训练的核心计算是 矩阵乘法。一个 Transformer 层里,Attention 和 FFN 加起来要做海量的矩阵乘加运算(MAC:Multiply-Accumulate)。
举个例子,GPT-3 有 1750 亿参数,训练时一次前向 + 反向传播涉及的浮点运算量大概在 10²³ FLOPs 这个级别(约 3.14 × 10²³ FLOPs)。这种计算有一个鲜明特征:
大量数据、高度规则、可并行拆分
矩阵乘法 C = A × B 里,结果矩阵 C 的每一个元素都是独立计算的,完全可以并行。
图里看得很清楚:CPU 一个一个算,GPU 全部一起算。
GPU 在大模型场景的几个关键加成:
- Tensor Core:NVIDIA 从 Volta 架构(V100)开始引入,专门做 4×4 矩阵乘加的硬件单元。一个时钟周期能完成 4×4×4=64 次 FP16 乘加运算,相比之下普通 CUDA Core 单周期只能做 1 次浮点运算。考虑调度开销后,整体吞吐也比纯靠 CUDA Core 快 8~16 倍。H100、B200 这些新卡的 Tensor Core 已经支持 FP8、甚至 INT4,单卡算力动辄几百 TFLOPS。
- 高带宽显存:大模型权重和激活值动辄几十 GB,数据搬运比计算还慢。GPU 用 HBM3/HBM3e 显存,带宽 3 TB/s 起步,是 CPU DDR5 内存的 30 倍以上。算得快还得搬得快,否则 ALU 就在那儿干等。
- CUDA 生态:NVIDIA 花了十几年构建的软件护城河。PyTorch、TensorFlow、cuDNN、cuBLAS 全都跑在 CUDA 之上。AMD 的 ROCm、Intel 的 OneAPI 想追,但生态差距太大。
我之前看 H100 的白皮书,单卡 FP8 算力能到 4000 TFLOPS,这个数字放在十年前是不可想象的。
四、CPU 真的没用了吗
并不是。CPU 在 AI 链路里仍然不可替代:
- 训练时的数据预处理:图片解码、文本 tokenize、数据增强这些 IO 密集 + 逻辑密集的活,GPU 干不了,全是 CPU 在扛。
- 推理服务:小模型在线推理(比如 Llama 7B 量化版本),CPU + AMX 指令集(Intel)或 SME(ARM)也能跑,且部署成本低,很多边缘场景就用 CPU。
- 调度和协调:多卡训练时的梯度同步、节点间通信、任务调度,全是 CPU 在操盘。
记住一句话:GPU 是干活的,CPU 是管事的。两者谁也替代不了谁。
面试高频追问
-
为什么 CPU 不能堆成千上万个核?
主要是三个问题:一是缓存一致性开销爆炸,核越多同步越难;二是内存带宽跟不上,核多了数据喂不饱;三是功耗和散热天花板摆在那。所以服务器 CPU 也就做到几十核到一百多核,再往上就得换 NUMA 架构或者集群方案了。
-
GPU 编程模型是什么?Java 能用吗?
主流是 NVIDIA 的 CUDA(C/C++)。Java 这边有几种方案:JCuda(JNI 调 CUDA)、TornadoVM(自动 JIT 到 GPU)、DJL(Deep Java Library,调用底层 cuDNN)。不过生产环境做 AI 还是 Python + PyTorch 的天下,Java 主要在推理部署(Spring AI、ONNX Runtime)这一层发力。
-
大模型推理一定要用 GPU 吗?
不一定。小模型量化后(INT8/INT4)在 CPU 上推理完全可行,特别是批量小、延迟要求不严的场景。大规模在线服务(高 QPS、长上下文)才必须上 GPU。选型看的是 “吞吐 vs 成本” 的平衡。
常见面试变体
- "CPU 和 GPU 的架构有什么本质区别?"
- "为什么深度学习选择 GPU 而不是 CPU?"
- "Tensor Core 和 CUDA Core 的区别是什么?"
- "如何评估一个任务是否适合 GPU 加速?"
记忆口诀
CPU 低延迟,GPU 高吞吐;CPU 老教授解难题,GPU 小学生堆人数。
判断任务该上 CPU 还是 GPU,就看三个特征:计算是不是可并行、运算是不是简单重复、数据量是不是大。三个都满足,GPU 碾压;只要有一个不满足,CPU 反而更合适。
总结
一句话:CPU 和 GPU 是分工关系,谁也替代不了谁。挖矿和大模型都用 GPU,就因为它们都是 “海量可并行计算” 任务,正中 GPU 高吞吐的设计甜区。把 “延迟 vs 吞吐” 这个底层逻辑讲清楚,再举出 Tensor Core、HBM、CUDA 这几个加分点,这道题基本就稳了。
