总览
先看这个
再往下看
SISD
并发就是;先执行一下该指令序列,再执行一下另外一个指令序列
并行就是:两个指令序列同时进行
在某个时间段内只能处理一个进程或者一个线程的指令序列,各个进程或者线程的指令序列只能并发的执行,不能并行的执行
单指令流是指同一时间段内只能处理一个时间序列
单数据流指的是每条指令只能处理一到两个数据
SIMD
由于此时每个ALU处理的地址不同,所以地址寄存器也不同
相当于一条指令同时给多个ALU同时执行,相当于执行多次该条指令或者说控制信号给多个ALU,多个ALU执行相同的操作
在各自局部存储器,该局部存储器最后合起来就是总的要控制的那块存储区域
此时一条指令可以并行处理多个数据(同时处理多个数据)
对应到例子就是像素处理,每个ALU处理部分像素
或者对所有数组元素做相同的处理,每个ALU对应的局部存储为数组的某个元素,所以每个ALU处理数组的某个元素
MISD
现实不存在,因为比较愚蠢的做法,此时的多条指令对数据的效果都是相同的。不可能说多条指令对数据的处理是不同的,或者说是指令序列,那么此时并行,依赖性全无。比如某个指令可能需要执行前一个指令执行的结果。但此时是同时执行原数据。显然不合理。
因此既然多条指令并行处理一个数据,效果也相同,为啥不一个执行就好了嘛
MIMD
有多个处理器,可以执行多个不同的指令序列,也可以执行多个相同的指令序列(此时就是并行处理多个数据流)
多处理器系统
多个处理器共享LLC,各个处理器还有更高级的Cache给自己用,
多计算机系统
消息传递可以说网络传递
同时执行不同指令序列流,而且每台处理的数据流也是不一样的,因为可以给要处理的数据到不同存储器,此时给的数据可以不一样
向量处理器
此时一个向量寄存器存储一个n维的向量
当两个n维的向量相加时,向量处理器只需要一次add指令,因为向量寄存器存储的是向量,所以它的相加单位是n维向量
而当普通处理器处理时需要n次add指令,因为每次的相加单位是一个数据
所以可以认为向量寄存器是数据并行,或者同时一条指令对多个数据处理
多端口,支持同时读
共享内存多处理器和多核处理器
核就是 处理器
共享内存多处理器和多核处理器就是一个玩意