多处理器
弗林分类法
弗林分类法(Flynn’s Taxonomy)是一种计算机体系结构的分类方法,由 弗林(Michael J. Flynn)于 1966 年提出。它根据计算机中 指令流 和 数据流 的数量,将计算机体系结构分为 SISD、SIMD、MIMD、MISD 四类:
单一指令流 | 多指令流 | |
---|---|---|
单一数据流 | 单指令流单数据流(SISD) | 多指令流单数据流(MISD) |
多数据流 | 单指令流多数据流(SIMD) | 多指令流多数据流(MIMD) |
指令流、数据流
指令 是告诉计算机执行特定操作的命令,例如“加法”、“减法”、“数据移动”等。
指令流 就是程序中一系列指令的有序集合,它决定了计算机执行的步骤。换句话说,指令流 就是“计算机要做什么”。
数据 可以是数字、字符、图像、视频等各种形式的信息。
数据流 指的是计算机在执行指令时处理的数据序列。换句话说,数据流 就是“计算机要处理什么”。
SISD
SISD (Single Instruction Single Data) 指的是单指令流单数据流,每个指令部件每次仅译码一条指令,而且在执行时仅为操作部件提供一份数据。
如上图所示,一个 处理单元(PU,Processing Unit)接收单条 指令流,执行每条指令时,对单独的 数据 进行操作。
SIMD
SIMD(Single Instruction Multiple Data)指的是单指令流多数据流,允许对多个数据点执行相同的操作,实现 数据级并行性。
如上图所示,SIMD 架构的计算机包含多个 处理单元,每个 处理单元 在同一个时刻执行相同的指令,但是对不同的 数据 进行操作。
这种方式可以大幅度提升计算的并行性,比如对于一个 N x N 的矩阵加法,在 SIMD 中,需要一个 处理单元 连续执行 N x N 次。而在 SIMD 中,如果有 N 个 处理单元 的话,只需要执行 N 次即可。
除了 SIMD 之外,还有一个 SIMT,大家需要有所区分。
简单来说,SIMD 就是堆硬件,我多添加几个 处理单元,这样就可以同时对多个 数据 进行操作,进而实现 数据并行性。
但是这里也有一个限制,就是不同的 处理单元 在同一个时刻必须执行相同的指令。
SIMT(Single Instruction Multiple Thread)是一种并行处理形式,其中单个指令同时在多个 线程 上执行,SIMT 是 GPU 的架构方式。
与 SIMD 不同,SIMT 允许 warp 内的 线程 在一定程度上偏离相同的执行路径,也就是说不同的 线程 在同一时刻不必执行相同的指令。
MISD
MISD(Multiple Instruction Multiple Data)指的是多指令流单数据流,即多个 处理单元 同时对同一份 数据 执行不同的指令。
这种架构在实际应用中非常罕见,因为它难以实现,并且适用场景有限。
一些 容错系统 可能采用 MISD 架构,通过多个不同的 处理单元 对同一份 数据 进行计算,然后比较结果以确保正确性。
MIMD
MIMD(Multiple Instruction Multiple Data)指的是多指令流多数据流,多个 处理单元 同时对不同的 数据 执行不同的指令。
现代计算机中的 多核处理器 就是 MIMD 架构的典型代表。
如上图所示,与 SIMD 不同,MIMD 中的不同 处理单元 可以去处理不同的 指令流。
多核处理器
物理核心
物理核心 是 CPU 芯片上实际存在的、独立的硬件 处理单元。
每个 物理核心 都拥有独立的运算电路和 缓存,能够独立执行指令。
物理核心是真实的硬件存在,是 CPU 进行计算的基础。
逻辑核心
逻辑核心 是通过 超线程(Hyper-Threading)等技术,在一个 物理核心 上虚拟出的多个 逻辑处理单元。
超线程 技术允许一个 物理核心 同时执行多个 线程,从而提高 CPU 的利用率。
逻辑核心是操作系统层面识别的 虚拟处理单元,并非真实的硬件存在。
超线程
超线程 技术的核心思想是将一个 物理核心 模拟成多个 逻辑核心(线程),从而在同一时间内执行多个 线程。每个 逻辑核心 都拥有自己的寄存器集合和执行单元,这些 逻辑核心 之间共享 物理核心 的资源,如 缓存 和执行单元。
超线程 技术旨在提高 CPU 的利用率,特别是在多线程应用程序中。
然而,超线程并不意味着性能翻倍。由于两个 逻辑核心 共享相同的 物理执行资源,因此 性能提升通常在 20% 到 30% 之间。
简单来说,物理核心 是实际存在的“房子”,逻辑核心 是在“房子”里隔出来的“房间”。
共享内存多处理机
共享内存多处理机(Shared Memory Multiprocessor)是一种并行计算机体系结构,其中多个处理器共享同一个 物理内存空间。这种架构允许处理器之间通过读写 共享内存 来进行通信和数据交换,从而实现并行计算。
共享内存多处理机 有两大主要架构特点:
- 共享内存空间 :
- 所有处理器都可以访问同一个 物理内存空间,使得数据共享变得简单高效。
- 处理器之间通过读写 共享内存 中的数据来进行通信和同步。
- 处理器互连 :
- 处理器通过互连网络(如总线、交叉开关等)连接到 共享内存。
- 互连网络的性能对 共享内存多处理机 的整体性能有重要影响。