Skip to content

多处理器的基本概念

2026 大纲 五(七)多处理器基本概念:SISD/SIMD/MIMD 与向量处理器、硬件多线程、多核处理器、共享内存多处理器(SMP)。只到"基本概念"——互连网络与 Cache 一致性协议的具体实现不在要求内

这一节的所有技术都在回答同一个问题

那个问题是:处理器闲着的时候,怎么让它别闲着

  • SIMD 一条指令喂多份数据,让多个 ALU 同时干活;
  • 硬件多线程在某个线程卡住时(比如 Cache 缺失)换另一个线程上;
  • 多核干脆多放几套完整的处理器。

🔴 前两者是把现有部件用满,后者是直接加部件。分清这一点,本篇的所有对比就都有了坐标——凡是"共享什么、复制什么"的问题,答案都从这里推。

顺着这条主线还能立刻理解一条常被死记的结论:

🔴 硬件多线程只复制状态,不复制算力。 每个线程有自己的寄存器组、PC、页表基址等线程状态,而 ALU、Cache、流水线本身全部共享。这既是它比多核便宜得多的原因,也是它性能提升有限(而不是翻倍)的原因——超线程实测约 10%~30%,收益全来自填补空隙,所以程序的指令级并行度越低、空隙越多,SMT 的收益反而越大

一、Flynn 分类法

根据指令流数据流的数量分为四类:

类型全称指令流数据流典型代表
SISD单指令流单数据流11传统单处理器
SIMD单指令流多数据流1向量处理器、GPU
MISD多指令流单数据流1理论存在,实际几乎没有
MIMD多指令流多数据流多核处理器、多处理器系统

SISD 是传统串行计算机,一个处理器 + 一个存储器逐条执行;部分 SISD 采用指令流水线提升性能,但本质仍是单指令流。SIMD 采用数据级并行:一个指令控制单元 + 多个处理单元,所有单元同时执行同一条指令但各自操作不同数据——一条 SIMD 指令可在 16 个 ALU 中并行处理 16 对数据。MIMD 同时执行多条指令、分别处理多个数据流,是目前主流的并行计算模型,按存储组织再分两类:

子类型存储组织通信方式别称
多计算机系统每个节点有私有存储器,地址空间独立消息传递消息传递型 MIMD
多处理器系统共享全局地址空间共享存储(访存指令)共享存储型 MIMD

关于这张表有三条要点:

🔴 MISD 是分类法的产物,不是需求的产物。 多条不同的指令处理同一份数据,结果该以谁为准?这个组合缺乏自然的应用场景,所以四类里只有它是空的。它被列出来,只是因为分类法是一个完整的二维组合。

🔴 向量处理器属于 SIMD——它用专用指令直接操作向量(一维数组),以流水化方式批量处理,是 SIMD 最典型的实现。多核处理器属于 MIMD。 这两条判断题里几乎必考其一。

🔴 SIMD 遇到条件分支效率会大幅下降:各处理单元要执行不同操作却又必须同步,只能让不满足条件的单元空转。所以 SIMD 适合规则同构的大批量数据(数组、图像、矩阵),MIMD 适合各干各的、逻辑不同的任务——问"哪个更快"本身就问错了

二、硬件多线程

传统 CPU 的线程切换要把寄存器上下文存到内存再读回来,开销上百个时钟周期。硬件多线程为每个线程配备独立的寄存器组和 PC,切换时只需激活对应线程的那套硬件状态,完全不必读写内存

复制(每个线程一套)共享(所有线程公用)
寄存器组ALU 等执行部件
PCCache
页表基址寄存器等线程状态流水线本身
特性细粒度多线程粗粒度多线程同时多线程(SMT)
切换时机每个时钟周期长延迟事件(如 Cache 缺失)不切换,同时执行
同一周期执行的线程数11多个
切换开销极小较大(需清空流水线)无切换开销
并行层次线程级(时间交错)线程级(时间交错)指令级 + 线程级

🔴 三者的分界只有一条:何时切换。 细粒度每个时钟周期切;粗粒度只在长延迟事件(如 Cache 缺失)时切、需要清空流水线所以开销更大;SMT 根本不切,同一周期同时发射多个线程的指令。

🔴 前两种是"轮流",SMT 是"同时"。 细/粗粒度任一时刻流水线里只有一个线程的指令,本质是时间上交错;SMT 同一周期流水线里同时有多个线程的指令,本质是空间上共存。由此推出一条常被问的:SMT 必须建立在超标量之上——只有多发射流水线才有多余的发射槽,单发射根本做不了 SMT。

⚠️ 但要注意反过来不成立:硬件多线程本身并不要求多核,单核也可以做(超线程就是单核上的 SMT)。"硬件多线程技术只可用于多核处理器"是错的。

Intel 的超线程(Hyper-Threading) 就是 SMT 的典型实现:一个物理核心维护两套线程状态部件(寄存器组、PC),缓存与 ALU 等执行资源由两个逻辑核心共享。SMT 通常构建在超标量 + 乱序执行的微架构之上。

三种方式的逐拍发射序列:把"轮流"和"同时"落到具体周期上(想弄清 SMT 与前两者到底差在哪一拍时展开)

细粒度——每个时钟周期切换,交替执行不同线程的指令;功能部件利用率高,但单线程速度被拉低(每隔一个周期才轮到自己):

时钟 i  :发射线程 A 的指令 j, j+1
时钟 i+1:发射线程 B 的指令 k, k+1
时钟 i+2:发射线程 A 的指令 j+2, j+3
时钟 i+3:发射线程 B 的指令 k+2, k+3

粗粒度——连续执行同一线程,仅当遇到长延迟事件导致流水线阻塞时才切换;切换要清空被阻塞的流水线并重新填充,开销大于细粒度:

时钟 i  :发射线程 A 的指令 j, j+1
时钟 i+1:发射线程 A 的指令 j+2, j+3 → 发现 Cache 缺失
时钟 i+2:线程调度,从 A 切换到 B
时钟 i+3:发射线程 B 的指令 k, k+1

SMT——单个时钟周期内同时发射并执行来自多个线程的多条指令,既利用指令级并行又实现线程级并行:

时钟 i  :发射线程 A 的指令 j, j+1 + 线程 B 的指令 k, k+1
时钟 i+1:发射线程 A 的指令 j+2 + 线程 B 的指令 k+2 + 线程 C 的指令 m

前两段里每一拍只有一个线程的指令在流水线中,第三段里同一拍并存多个——这就是为什么只有多发射(超标量)的流水线才做得了 SMT。

三、多核处理器

多个独立处理核心集成在同一芯片上,也称片上多处理器(CMP)。典型的 Cache 层次是:每个核拥有私有的 L1 Cache(有时也包括 L2),多个核共享更高层级的 Cache(如 L3),所有核通过互连网络共享主存储器。每个核独立运行一个线程,实现物理上的真正并行;而单核的细/粗粒度多线程只是时间交错,任一时刻仅有一个线程在运行。

一个直观的类比:搬 4 块石头到马路对面(每块 1 分钟)。串行处理器需要 4 分钟;双核相当于两个人同时搬,2 分钟;向量处理器(SIMD)相当于用长木板同时推 4 块,1 分钟。多核靠增加处理单元实现任务级并行,向量处理器靠单指令多数据实现数据级并行。

加速比受 Amdahl 定律 卡死:设可并行部分占比 p、核数 n,则

S=1(1p)+pn  n  11p

四、共享内存多处理器(SMP)

多个处理器共享统一的物理地址空间,任意 CPU 可通过普通访存指令访问内存中的任意位置,通过读/写共享变量通信。按内存访问延迟的特性分为 UMA(所有 CPU 访问任意内存单元的延迟基本相同)与 NUMA(延迟取决于请求 CPU 与目标内存的物理位置关系,主存被划分为多个区域分别连接到不同 CPU):

特性UMANUMA
内存控制器位置集中式(早期北桥架构)分布式(集成到各 CPU 内部)
访问延迟均匀本地内存快,远程内存慢
互连方式前端总线(FSB)高速互连总线(如 Intel QPI)
瓶颈总线争用数据布局敏感
可扩展性较差较好

NUMA 的出现正是为了解决前端总线争用:把内存控制器集成进 CPU,每个 CPU 直接连接一部分物理内存(本地内存),CPU 之间通过高速互连总线访问远程内存。

多个 CPU 可能同时访问同一共享变量,必须引入同步机制保证原子性,常用互斥锁。Cache 一致性问题也比单处理器严格:多个 CPU 的 Cache 可能同时缓存同一物理地址的副本,任意时刻所有副本必须一致,由硬件协议通过传播写操作或无效化其他副本来保障。单处理器上的"Cache 与主存一致"(写直达/写回)见 Cache 写策略;多处理器把这个问题从"两级之间"扩展成"多个 Cache 之间",难度上了一个量级,但具体协议不在大纲要求内。

考点速记

  1. 全篇主线是让闲着的部件别闲着:SIMD 喂满 ALU、多线程填补停顿空隙、多核直接加部件;Flynn 按指令流 × 数据流分四类,MISD 是分类的产物不是需求的产物向量处理器属 SIMD、多核属 MIMD,SIMD 遇条件分支效率大幅下降。
  2. 硬件多线程只复制状态(寄存器组、PC),不复制算力(ALU、Cache);三种方式的分界是何时切换,细/粗粒度是时间上轮流、SMT 是空间上共存且必须建立在超标量之上;但硬件多线程本身不要求多核,单核也能做。
  3. 多核实现物理上的真正并行,但被 Amdahl 定律的串行部分卡死,不会线性加速;SMP 所有处理器共享单一物理地址空间,其中 UMA 延迟均匀而扩展性差、NUMA 可扩展但对数据布局敏感,Cache 一致性由硬件协议保障。

这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那道):

  • 挑关于并行处理技术的不正确叙述:四个选项通常各踩一处——"多核处理器属于 MIMD"(对)、"向量处理器属于 SIMD"(对)、"硬件多线程技术只可用于多核处理器"(,单核也能做,超线程就是单核上的 SMT)、"SMP 中所有处理器共享单一物理地址空间"(对,这正是共享内存多处理器的定义)。

易错:把硬件多线程与多核绑在一起。前者复制的是线程状态,与核数无关。

易错:把向量处理器归到 MIMD。它一条指令操作一整个向量,是 SIMD。

易错:认为多核能带来线性加速。串行部分的占比按 Amdahl 定律卡死了上限。

教材出处
  • Flynn 分类与多处理器基本概念:袁春风《计算机组成与系统结构》第 3 版 §9.1 并行处理系统概述、§9.2 多处理器系统(按大纲裁剪,体系结构细节超纲)

相关知识

流水线性能分析与多发射技术计算机性能指标Cache 写策略CPU 的功能与基本结构

真题练习

相关真题(1题)