多核处理器的基本概念

多核处理器(片上多处理器,CMP)= 在一个芯片里集成多个完整的处理器核心。

定义只有一句话,但这一节真正要讲清楚的是为什么会走到这一步——多核不是”技术进步的自然结果”,它是三条路同时走到头之后的被迫转向。理解了这个来龙去脉,这一节的几道判断题就不用背了。

机制

复制了什么

沿用 5.7.1 那条判据:

复制共享
多核整个核心——控制器、ALU、寄存器、L1 Cache、L2 CacheL3(末级)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 有限,超标量宽度加不上去( 检测逻辑,见 5.6.5)
存储墙提高访存速度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 定律:串行占比 → 加速比上限 。

链接