多核处理器的基本概念
多核处理器(片上多处理器,CMP)= 在一个芯片里集成多个完整的处理器核心。
定义只有一句话,但这一节真正要讲清楚的是为什么会走到这一步——多核不是”技术进步的自然结果”,它是三条路同时走到头之后的被迫转向。理解了这个来龙去脉,这一节的几道判断题就不用背了。
机制
复制了什么
沿用 5.7.1 那条判据:
| 复制 | 共享 | |
|---|---|---|
| 多核 | 整个核心——控制器、ALU、寄存器、L1 Cache、L2 Cache | L3(末级)Cache、内存控制器、内存、I/O |
每个核心都是一个完整的处理器——有自己的取指译码、自己的流水线、自己的寄存器、自己的私有 Cache。它们可以各跑各的程序,互不相干。 所以多核属于 MIMD,而且是共享内存的那一类(5.7.4)。
Cache 的私有 / 共享划分是这一节的实质内容:
flowchart TB C0["核心 0<br/>L1I + L1D"] --> L20["L2(私有)"] C1["核心 1<br/>L1I + L1D"] --> L21["L2(私有)"] C2["核心 2<br/>L1I + L1D"] --> L22["L2(私有)"] L20 --> L3[("L3 末级 Cache<br/>所有核心共享")] L21 --> L3 L22 --> L3 L3 --> MEM[("主存")] classDef core fill:#dbeafe,stroke:#2563eb,stroke-width:2px classDef priv fill:#fde68a,stroke:#d97706,stroke-width:2px classDef shared fill:#dcfce7,stroke:#16a34a,stroke-width:2px class C0,C1,C2 core class L20,L21,L22 priv class L3,MEM shared
| 层次 | 私有还是共享 | 为什么 |
|---|---|---|
| L1(分 I/D) | 每核私有 | 要求极快,必须紧贴核心;分 I/D 的理由见 5.6.2 |
| L2 | 通常每核私有 | 容量与延迟的折中 |
| L3(LLC) | 所有核心共享 | 便于核间共享数据,也提高整体利用率 |
| 主存 | 共享 | 单一物理地址空间 |
私有 Cache 的存在,直接制造了 Cache 一致性问题——同一个内存单元的副本可能同时存在于多个核心的私有 Cache 里,一个核改了,别的核看到的还是旧值。这就是 5.7.4 和 3.5.5 要解决的问题。
为什么转向多核:三堵墙
2005 年前后,单核性能提升的三条路同时撞墙。
| 墙 | 是什么 | 撞在哪 |
|---|---|---|
| 功耗墙 / 频率墙 | 提高主频 | 功耗随频率超线性上升,散热跟不上 |
| ILP 墙 | 挖指令级并行 | 程序里的 ILP 有限,超标量宽度加不上去( |
| 存储墙 | 提高访存速度 | CPU 与主存的速度差距持续拉大(3.1.2) |
功耗墙的定量形式是这一节唯一需要算的东西:
其中
反过来用这个式子,就得到了多核的全部理由:
把频率降到一半,电压也能降到约一半:
两个这样的核心加起来:
而单核跑满频是
。 吞吐率相当(对可并行的负载),功耗只有约四分之一。
这就是”同等性能下多核更省电”的来源,也是1.3.1 里”功耗”这个指标在本章的落地。
多核带来的新问题
多核不是免费的性能。 它把三个新问题推给了软件:
| 问题 | 说明 | 去哪里解决 |
|---|---|---|
| 程序必须是并行的 | 串行程序在 8 核上和在 1 核上一样快 | 应用软件 |
| 加速比受串行部分限制 | Amdahl 定律——串行占比 | 算法 |
| 共享数据要同步 | 多个核改同一个变量 | OS 2.3、5.7.4 |
| Cache 一致性 | 私有 Cache 的副本要保持一致 | 硬件协议,3.5.5 |
第二条值得写清楚:设程序中串行部分占比
串行部分占 5%,无论多少个核,加速比也超不过 20 倍。 这是多核路线自身的天花板。
几个常混的名词
疑问点:下列关于双核技术的叙述中,正确的是——A 主板上有两个 CPU;B 利用超线程技术实现;C 在 CPU 上集成两个运算核心;D 双核 CPU 是时间并行的并行计算
选 C。而另外三个选项各自踩中一个不同的辨析点,值得一个一个过。
A. “主板上有两个 CPU”——错,那是多处理器(多路),不是多核。
“路”和”核”是两个不同的计数单位,这是本节最该分清的一对词:
词 数的是 例子 路(socket) 物理芯片的个数 双路服务器 = 主板上插 2 颗 CPU 核(core) 一颗芯片里的核心个数 8 核 CPU = 1 颗芯片里 8 个核 线程(逻辑核) 每个核能同时跑几个线程 超线程时 = 核数 × 2 三者可以叠加:双路 × 每颗 8 核 × 每核 2 线程 = 32 个逻辑核心。
B. “利用超线程技术实现”——错,这两个是互相独立的技术。
双核 超线程 运算部件 各有一套 共享一套 性能 接近两倍(并行负载) 15%~30% 属于 真正的多处理器 同时多线程 SMT 一颗双核 CPU 可以有超线程(→ 4 个逻辑核),也可以没有(→ 2 个逻辑核)。两者正交。
C. “在 CPU 上集成两个运算核心”——对,这就是多核的定义。
D. “时间并行”——错,多核是空间并行。
判据(5.7.1):复制部件的是空间并行,同一套部件在不同时刻分阶段的是时间并行。
时 间 并 行 流 水 线 ( 唯 一 ) 空 间 并 行 超 标 量 、 、 多 核 、 多 处 理 器
疑问点:判断——"同等性能下,采用双核 CPU(相比单核 CPU)可以降低计算机系统的功耗和体积"
对。而且这句话正是多核路线诞生的原因,不是它的一个附带好处。
功耗: 按上面那个式子,两个半频核心达到与一个满频核心相当的吞吐,功耗约为
。因为功耗随频率超线性增长(电压也要跟着涨),把工作摊给更多低频核心总是更省电。 体积: 功耗降下来之后连带的结果——散热器可以更小、电源可以更小、机箱可以更小。反过来,如果要用单核达到同样性能,就得把频率推很高,随之需要更强的散热和供电,整机反而更大。
这句话有一个隐含前提,题目没写但要知道:负载必须是可并行的。 对纯串行程序,双核不会更快,“同等性能”这个前提就不成立了。408 的判断题按”对”处理,但清楚这个前提能防止在别的题上过度推广。
疑问点:判断——"(多核处理器 / 多处理器)通常采用偶数路 CPU,如 2 路、4 路、6 路等";王道给的是 SMP 一般采用偶数路,那就选最对的
“选最对的”这个处理方式是对的。但这两句里有一句用错了单位,值得指出来。
关键在于”路”数的是芯片,不是核心:
- “多处理器通常采用偶数路”——用词正确。多处理器系统(SMP)确实按”路”计数,主流是 2 路、4 路、8 路。
- “多核处理器通常采用偶数路”——单位错位。多核说的是一颗芯片里几个核,应当说”核”而不是”路”。一颗 8 核 CPU 插在单路主板上,它是”1 路 8 核”,说它是”8 路”是错的。
至于”偶数路”这个结论本身,它是经验描述而非硬性规则:
说法 实情 SMP 常见 2 / 4 / 8 路 ✅ 主流确实如此 ”偶数路” 大体成立,但单路(1 路)服务器极其常见,所以严格说是”多路系统中通常是偶数路” 例子里的”6 路” 6 是偶数,与”偶数”这个说法自洽;但实际产品以 2 的幂为主,6 路少见 应试口径:按王道给的”SMP 一般采用偶数路 CPU”记,选它为正确选项。 同时记住”路 ≠ 核”这条,因为它才是真正会被单独设成干扰项的点(比如上一道题的 A 选项)。
边界
边界辨析:路 / 核 / 线程
- 路(socket):主板上几颗物理芯片
- 核(core):一颗芯片里几个完整核心
- 线程(逻辑核):每核能同时跑几个线程(有 SMT 才
) 逻 辑 核 总 数 路 数 每 颗 核 数 每 核 线 程 数
边界辨析:多核 / 超线程
- 多核:复制整个核心,运算部件各有一套,性能接近倍增
- 超线程:只复制线程状态,运算部件共享,提升 15%~30%
两者正交,可以同时存在。
边界辨析:时间并行 / 空间并行
多核、SIMD、超标量都是空间并行;只有流水线是时间并行。
“双核 CPU 是时间并行的并行计算”是错的。
边界辨析:私有 Cache / 共享 Cache
- L1、L2 通常每核私有 → 这是 Cache 一致性问题的来源
- L3(末级)所有核共享 → 便于核间共享数据
若所有 Cache 都共享,就没有一致性问题,但也就没有速度。
对照速查
| 说法 | 判断 |
|---|---|
| 双核是在一个 CPU 芯片上集成两个运算核心 | ✅ |
| 双核是主板上有两个 CPU | ❌ 那是双路 |
| 双核靠超线程实现 | ❌ 两者正交 |
| 双核是时间并行 | ❌ 空间并行 |
| 同等性能下多核比单核功耗低、体积小 | ✅ |
| 多核属于 MIMD | ✅ 且是共享内存类 |
| 多核各核心共享 L1 Cache | ❌ L1 私有,L3 共享 |
| 串行程序在多核上会自动变快 | ❌ 受 Amdahl 定律限制 |
| 撞墙 | 内容 |
|---|---|
| 功耗墙 | |
| ILP 墙 | 程序自身的指令级并行有限,检测逻辑 |
| 存储墙 | CPU 与主存速度差距持续拉大 |
考点
- 双核相关的判断题:四个选项各对应一个辨析点(路/核、超线程、时间/空间并行)。
- 路、核、线程三个单位:能算出逻辑核心总数。
- 同等性能下多核更省电:能说出功耗公式和”电压随频率涨”这一条。
- 私有 / 共享 Cache 的划分:L1、L2 私有,L3 共享;一致性问题源于私有 Cache。
- Amdahl 定律:串行占比
→ 加速比上限 。
链接
- 🏠 返回总览:计算机组成原理第 5 章:中央处理器总览
- ⬅️ 上一节:5.7.2 硬件多线程的基本概念
- ➡️ 下一节:5.7.4 共享内存多处理器的基本概念
- 🔗 Cache 一致性:3.5.5 Cache 一致性问题
- 🔗 功耗指标:1.3.1 计算机的主要性能指标
- 🔗 OS 对照:OS 2.2.6 多处理机调度
- 📖 名词库:第 5 章名词库