> For the complete documentation index, see [llms.txt](https://aye10032.gitbook.io/computerorganizationnote/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aye10032.gitbook.io/computerorganizationnote/di-wu-zhang-zhong-yang-chu-li-qi/5.6-duo-chu-li-qi.md).

# 5.6 多处理器

## 5.6.1 计算机体系结构

### 一、单指令流单数据流（SISD）

* **特性**
  * 各指令只能并发，<mark style="color:orange;">**不能并行**</mark>
  * 每条指令处理一两个数据
  * <mark style="color:orange;">**不是**</mark><mark style="color:purple;">**数据级**</mark>并行技术
* **硬件组成**
  * 一个处理器、一个主存储器
  * 实现指令流水线需要多个功能性部件，采用<mark style="color:purple;">**多模块交叉存储器**</mark>

### 二、单指令流多数据流（SIMD）

* **特性**
  * 各指令只能并发，<mark style="color:orange;">**不能并行**</mark>
  * 每条指令可以同时处理多个具有相同特征的数据，如for循环数组计算等
  * <mark style="color:orange;">**是**</mark><mark style="color:purple;">**数据级**</mark>并行技术
* **硬件组成**
  * 一个控制部件（CU）
  * 多个执行单元（如ALU）：不同执行单元同时执行一条指令，处理不同数据
  * 多个局部存储器
  * 一个主存储器

### 三、多指令流单数据流（MISD）

实际并不存在

### 四、多指令流多数据流（MIMD）

* **特性**
  * 指令<mark style="color:orange;">**可以并行**</mark>
  * <mark style="color:orange;">**是**</mark><mark style="color:purple;">**线程级**</mark>并行技术
* **进一步分类**
  * **多处理器系统**
    * 各处理器之间可以访问同一个主存
    * 可以通过主存相互传递数据
    * 多个处理器、一个主存储器
  * **多计算机系统**
    * 不能直接访问对方的主存
    * 通过消息传递来共享数据

### 五、向量处理器

* **特性**
  * **是SIMD的变种**
  * 处理的数据为向量
  * 擅长向量计算、大型浮点运算等
* **硬件组成**
  * 多个处理单元、多组向量寄存器
  * 主存采用<mark style="color:purple;">**多端口同时读取的多模块交叉存储器**</mark>
  * 需要大容量、集中式的主存储器

## 5.6.2 多核处理器

即<mark style="color:purple;">**共享内存多处理器（SMP）**</mark>

* 所有核（处理器）共享一个主存
* 可以通过指令直接访问对方的地址空间

|     UMA     |      NUMA      |
| :---------: | :------------: |
|  多处理器访问统一内存 | 优先给CPU分配最接近的内存 |
|    运算扩展性差   |     运算扩展性强     |
| 有cache一致性问题 |                |

## 5.6.3 硬件多线程

* 处理器中存在多个IR、功能部件、寄存器组，则可以支持硬件多线程
* 线程切换时不用再花费开销保存和恢复现场

|        |             细粒度线程            |          粗粒度线程         |        同时多线程(SMT)        |
| :----: | :--------------------------: | :--------------------: | :----------------------: |
|  指令发射  | <p>每个时钟周期轮流发射<br>不同线程的指令</p> | <p>连续发射同一线程的<br>指令</p> | <p>一个时钟周期内发送<br>多条指令</p> |
| 线程切换频率 |          一个时钟周期切换一次          |       仅在流水线阻塞时切换       |                          |
| 线程切换代价 |               低              |        高，需要重载流水线       |                          |
|   并行性  |    <p>指令级并行<br>线程间不并行</p>    | <p>指令级并行<br>线程间不并行</p> |   <p>指令级并行<br>线程级并行</p>  |

超线程就是SMT技术
