并行计算
目录
✨根据指令的同时执行和数据的同时执行,计算机系统可以分成以下四类:
- 单处理器,单数据 (SISD)
- 单处理器,多数据 (SIMD)
- 多处理器,单数据 (MISD)
- 多处理器,多数据 (MIMD)
以上分类方法称为费林分类
¶SISD
✨单处理器单数据就是单 CPU 的机器,它在单一的数据流上执行指令,在 SISD 中,指令被顺序地执行,对于每一个 CPU 时钟,CPU 按照下面的顺序执行:
- Fetch: CPU 从一片内存区域中(寄存器)获得数据和指令
- Decode: CPU 对指令进行译码
- Execute: 该执行在数据上执行,将结果保存在另一个寄存器中
🎶当 Execute 阶段完成之后,CPU 回到步骤 1 准备执行下一个时钟循环。运行在这种计算机上的算法是顺序执行的,不存在任何并行
✨这种架构(冯·诺依曼体系)的主要元素:
- 中心内存单元:存储指令和数据
- CPU:用于从内存单元获得指令/数据,对指令解码并顺序执行它们
- I/O 系统:程序的输入和输出流
传统的单处理器计算机都是经典的 SISD 系统。下图表述了 CPU 在 Fetch、Decode、Execute 的步骤中分别用到了哪些单元:
¶MISD
这种模型中,有 n 个处理器,每一个都有自己的控制单元,共享同一个内存单元。在每一个 CPU 时钟中,从内存获得的数据会被所有的处理器同时处理,每一个处理器按照自己的控制单元发送的指令处理。
在这种情况下,并行是指令层面的并行,多个指令在相同的数据上操作。能够合理利用这种架构的问题模型比较特殊,例如数据加密等。因此,MISD 在现实中并没有很多用武之地,更多的是作为一个抽象模型的存在
¶SIMD
SIMD 计算机包括多个独立的处理器,每一个都有自己的局部内存,可以用来存储数据。所有的处理器都在单一指令流下工作,具体而言就是:存在 n 个数据流,每个处理器处理一个,所有的处理器同时处理每一步,在不同的数据上执行相同的指令。
✨SIMD 架构特点
SIMD 架构比 MISD 架构要实用的多,很多问题都可以用 SIMD 计算机的架构来解决
这种架构的算法非常好设计,分析和实现
😣只有可以被分解成很多个小问题(小问题之间要独立,可以不分先后顺序被相同的指令执行)的问题才可以用这种架构解决。很多超级计算机就是使用这架构设计出来的。GPU 这种处理器就是内置了很多个 SIMD 处理单元,使这种架构在今天应用非常广泛。
¶MIMD
在费林分类中,这种计算机是最广泛使用、也是最强大的一个种类。这种架构有 n 个处理器,n 个指令流,n 个数据流。每一个处理器都有自己的控制单元和局部内存,让 MIMD 架构比 SIMD 架构的计算能力更强。每一个处理器都在独立的控制单元分配的指令流下工作;因此,处理器可以在不同的数据上运行不同的程序,这样可以解决完全不同的子问题甚至是单一的大问题。
✨在 MIMD 架构中,并行是通过线程或进程层面来实现的,这也意味着处理器一般是异步工作的。这种类型的计算机通常用来解决那些没有统一结构、无法用 SIMD 来解决的问题。如今,很多计算机都应用了这中间架构,例如超级计算机,计算机网络等。
😣然而异步的算法非常难设计、分析和实现是这种架构的弊端