当前位置: 首页 > news >正文

二十五、多处理器的基本概念 (SISD/SIMD/MIMD)

目录
  • 1. SISD - 单指令流单数据流
  • 2. SIMD - 单指令流多数据流
  • 3. MIMD - 多指令流多数据流
  • 总结与对比
  • 简单类比


多处理器体系结构中的三个基本概念:SISD、SIMD 和 MIMD,这些概念由迈克尔·弗林(Michael Flynn)于1966年提出,被称为弗林分类法(Flynn's Taxonomy)。它根据指令流(Instruction Stream)数据流(Data Stream) 的数量对计算机体系结构进行分类,是理解并行计算的基础。


1. SISD - 单指令流单数据流

这是最传统、最简单的计算机模型,即经典的冯·诺依曼体系结构

  • 单指令流:在任一时刻,CPU只执行一条指令。
  • 单数据流:在任一时刻,指令只处理一个数据项。

工作方式
一个处理单元(PU)从一个内存模块(M)中取指令和数据,然后按顺序一条一条地执行。

现代例子

  • 传统的单核CPU:无论是早期的Intel 8086还是现在的Intel酷睿系列的单核版本,都是典型的SISD。
  • 即使有流水线(Pipelining)、超标量(Superscalar)等指令级并行技术(在单个时钟周期内发射多条指令),但从宏观的指令流来看,它仍然属于SISD范畴,因为最终指令是按程序顺序执行的。

示意图

      ┌─────────┐│ 控制单元 ││ (CU)    │└─────────┘│▼┌─────────┐  指令/数据   ┌──────┐│ 处理单元 │ ◄─────────► │ 内存 ││  (PU)   │             └──────┘└─────────┘

2. SIMD - 单指令流多数据流

这种架构的核心思想是一条指令同时操作多个数据。非常适合处理数据并行性高、计算密集型的问题。

  • 单指令流:所有处理单元在同一时刻执行同一条指令。
  • 多数据流:但每条指令同时处理多个不同的数据项

工作方式
一个控制单元(CU)向多个处理单元(PE)广播同一条指令。每个处理单元有自己的数据内存(或从共享内存中访问不同的数据部分),并同时对不同的数据执行相同的操作。

现代例子

  • GPU:图形处理器是SIMD的典范。当需要对屏幕上的数百万个像素进行相同的着色计算时,GPU的成千上万个核心会同时执行相同的操作(指令),但每个核心处理一个不同的像素(数据)。
  • CPU中的向量指令集
    • Intel的SSEAVX 指令集(如一次对4个单精度浮点数或2个双精度浮点数进行加法)。
    • ARM的NEON 指令集。
    • 这些指令允许一条指令对一组数据(向量/数组)进行操作,是SIMD在CPU中的实现。
  • 经典超级计算机:如Thinking Machines的CM-2。

适用场景:图像/视频处理、科学计算(矩阵运算、模拟)、音频处理、机器学习中的部分计算。

示意图

                           ┌─────────┐│ 控制单元 ││  (CU)   │└─────────┘│┌───────────────────┬───┴───┬───────────────────┐▼                   ▼       ▼                   ▼┌─────────┐        ┌─────────┐ ┌─────────┐     ┌─────────┐│处理单元1 │        │处理单元2 │ │处理单元3 │ ... │处理单元N ││  (PE1)  │        │  (PE2)  │ │  (PE3)  │     │  (PEn)  │└─────────┘        └─────────┘ └─────────┘     └─────────┘│                   │           │               │▼                   ▼           ▼               ▼┌─────────┐        ┌─────────┐ ┌─────────┐     ┌─────────┐│ 数据内存1│        │数据内存2 │ │数据内存3 │ ... │数据内存N │└─────────┘        └─────────┘ └─────────┘     └─────────┘

(也可以是所有PE共享一个内存,但访问不同地址)


3. MIMD - 多指令流多数据流

这是目前多处理器系统最常见的形式。系统中的多个处理器可以异步地、独立地执行不同的任务。

  • 多指令流:每个处理器核心可以同时执行不同的指令
  • 多数据流:每个指令流操作不同的数据

工作方式
系统中有多个处理单元(通常是完整的处理器核心,每个都有自己的控制单元)。每个处理器独立地从内存中取自己的指令和数据,并行地执行不同的程序或同一程序的不同部分。

现代例子

  • 多核CPU:你的笔记本电脑或手机上的双核、四核、八核CPU。每个核心可以同时运行不同应用程序的线程,是典型的MIMD。
  • 多处理器服务器:包含多个CPU插槽的服务器。
  • 计算机集群:由网络连接的多台独立计算机共同工作,例如超级计算机和云计算数据中心。

MIMD的两种内存架构

  1. 共享内存MIMD:所有处理器共享同一物理内存。处理器之间通过读写共享内存来进行通信。例如:多核CPU(UMA/NUMA架构)。
  2. 分布式内存MIMD:每个处理器拥有自己的本地内存。处理器之间通过消息传递(如MPI库)来进行通信。例如:计算机集群。

适用场景:通用多任务处理(同时运行多个应用程序)、并行处理可以分解为独立子任务的问题(如Web服务器处理多个请求、复杂的科学模拟)。

示意图(共享内存为例)

      ┌─────────┐        ┌─────────┐             ┌─────────┐│ 处理器1  │        │ 处理器2  │    ...      │ 处理器N  ││ (CPU1)  │        │ (CPU2)  │             │ (CPUn)  │└─────────┘        └─────────┘             └─────────┘│                  │                       │└──────────┬───────┴──────────────┬────────┘▼                      ▼┌─────────────────────────────────────┐│            共享内存                   │└─────────────────────────────────────┘

总结与对比

类型 指令流 数据流 核心思想 现代例子 优点 缺点
SISD 顺序执行 单核CPU 控制简单 无并行性,性能受限
SIMD 数据级并行 GPU, CPU向量指令 能效高,吞吐量大 灵活性差,不适合条件分支多的任务
MIMD 任务级并行 多核CPU, 计算机集群 灵活性高,通用性强 硬件复杂,需要解决缓存一致性、通信同步等问题

简单类比

  • SISD:像一个厨师,一次只做一道菜的一个步骤。
  • SIMD:像一条流水线上的多个工人,每个工人同时执行相同的动作(如都拧螺丝),但每个人拧的是不同产品上的螺丝。
  • MIMD:像一个厨房里的多个厨师,每个人独立地做不同的菜(有的切菜,有的炒菜),互相协作完成一桌宴席。

现代计算系统通常是这些模式的混合体。例如,一个多核CPU(MIMD)的每个核心内部又支持SIMD指令集。而一个GPU(本身是SIMD)集群又构成了一个更大规模的MIMD系统。

http://www.wxhsa.cn/company.asp?id=5084

相关文章:

  • java课堂问题2
  • 集训总结(六)
  • GAS_Aura-Prediction GAS
  • PromptPilot 产品发布:火山引擎助力AI提示词优化的新利器
  • 安装window版本docker
  • 已严肃完成今日特征多项式大学习
  • docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式 - 实践
  • python_Day21_mysql(2)
  • .zip用法
  • vue2使用pnpm编译打包时的错误处理
  • 中南上课第一天
  • 二十四、深入理解CPU控制信号的最终使命
  • 20250915 - 状压dp 总结
  • PS2025安装包永久免费版下载安装教程Photoshop 2025 v26.0安装包永久免费版下载
  • 学校真是太棒了
  • 如果远程玩家过早结束异步任务,并且具有该集的任务仍在运行,则该任务被杀死-SetWaitingOnRemotePlayerData()
  • 9.15日总结
  • 二十二、流水线CPU的神经脉络:详解控制信号的产生、保存与传递
  • python_Day20_mysql(1)
  • 确定调用 TargetData是否已发送-CallReplicatedTargetDataDelegatesIfSet()
  • 二十三、流水线的起点为何无需指挥?深入理解IF与ID这两个“公共流水段”
  • 来解剖 来平息你的颤抖 叫嚷着还不足够 还需要更多疼痛 才值得温柔
  • 从客户端拿到缓存数据-ConsumeClientReplicatedTargetData()
  • 减少KVCache
  • 考研复习-操作系统-第三章-内存管理 - 详解
  • python_Day18_linux(1)
  • 机器人动力学-上交桂凯-睿慕课
  • 2 linux系统基础命令+文件操作命令
  • 支持国产cpu架构的nacos-2.4.3
  • nc工具使用 - 谷粒