多核处理器
弗林分类法
弗林分类法(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)是一种并行计算机体系结构,其中多个处理器共享同一个物理内存空间。这种架构允许处理器之间通过读写共享内存来进行通信和数据交换,从而实现并行计算。
共享内存多处理机有两大主要架构特点:
- 共享内存空间:
- 所有处理器都可以访问同一个物理内存空间,使得数据共享变得简单高效。
- 处理器之间通过读写共享内存中的数据来进行通信和同步。
- 处理器互连:
- 处理器通过互连网络(如总线、交叉开关等)连接到共享内存。
- 互连网络的性能对共享内存多处理机的整体性能有重要影响。