138 lines
4.6 KiB
Markdown
138 lines
4.6 KiB
Markdown
# 第4章 数据级并行 - 章节习题与答案详解
|
||
|
||
## 习题汇总
|
||
|
||
### 题目1(曲冠南老师)
|
||
**出处**:qgn老师,第4章PPT Slide 4-5
|
||
|
||
**原题**:
|
||
```
|
||
思考:一个SPMD程序如何运行在SISD(或MIMD)上?
|
||
```
|
||
|
||
---
|
||
|
||
### 题目2(李宏图老师)
|
||
**出处**:lht老师(两版本共有),PPT中
|
||
|
||
**原题**:
|
||
```
|
||
思考:一个数据并行程序如何运行在SISD(或MIMD)上?
|
||
```
|
||
|
||
---
|
||
|
||
### 题目3(谭婧炜佳老师)
|
||
**出处**:tjwj老师,第4章PPT Slide 4-95
|
||
|
||
**原题**:
|
||
```
|
||
思考:Nvidia GPU中不包含以下哪(几)种设计思想?
|
||
|
||
SIMD
|
||
多线程
|
||
MIMD
|
||
VLIW
|
||
乱序执行
|
||
Tomasulo
|
||
```
|
||
|
||
---
|
||
|
||
## 参考答案与详细解析
|
||
|
||
### 题目1答案
|
||
|
||
**参考答案**:
|
||
|
||
一个SPMD程序可以通过以下两种方式运行在SISD或MIMD上:
|
||
|
||
**方式一:SISD上运行(单核单线程串行化执行)**
|
||
- 将Multiple Data(多数据)拆成多次Single Data(单数据)
|
||
- 变为SISD(单指令单数据)模式
|
||
- 每次只处理一个数据元素,通过循环遍历所有数据
|
||
- 问题:排队、耗时、耗电
|
||
|
||
**方式二:MIMD上运行(多核多线程并行化执行)**
|
||
- 将Single Program(单程序)的每条指令多次重复
|
||
- 变为MIMD(多指令多数据)模式
|
||
- 多个线程/核心同时执行相同的程序,但处理不同的数据
|
||
- 问题:取址、译码操作冗余
|
||
|
||
**考点**:SPMD编程模型的理解,以及数据级并行在不同体系结构上的实现方式。
|
||
|
||
**原理**:
|
||
- SPMD(Single Program Multiple Data)是并行编程的一种模型,多个进程/线程执行同一个程序但使用不同的输入数据
|
||
- SISD(Single Instruction Single Data)是传统的串行处理器模式
|
||
- MIMD(Multiple Instruction Multiple Data)是多核并行处理模式
|
||
- 数据级并行的核心是对大量的数据施加同种变换
|
||
|
||
---
|
||
|
||
### 题目2答案
|
||
|
||
**参考答案**:
|
||
|
||
一个数据并行程序可以通过以下两种方式运行在SISD或MIMD上:
|
||
|
||
**方式一:SISD上运行(单核单线程串行化执行)**
|
||
- 将Multiple Data拆成多次Single Data
|
||
- 变为SISD模式
|
||
- 通过循环逐个处理数据元素
|
||
|
||
**方式二:MIMD上运行(多核多线程并行化执行)**
|
||
- 将Single Program的每条指令多次重复
|
||
- 变为MIMD模式
|
||
- 多核并行处理不同数据
|
||
|
||
**考点**:数据级并行(Data-Level Parallelism, DLP)概念的理解,以及SPMD模型与底层硬件的映射关系。
|
||
|
||
**原理**:
|
||
- 数据级并行的核心思想是对大量数据施加相同操作
|
||
- SPMD模型中多个线程执行相同程序但处理不同数据
|
||
- 在SISD上需要串行化,效率较低
|
||
- 在MIMD上虽然可以并行,但每个核心仍需独立取址译码,存在冗余
|
||
|
||
---
|
||
|
||
### 题目3答案
|
||
|
||
**参考答案**:
|
||
|
||
Nvidia GPU中**不包含**以下设计思想:
|
||
|
||
**乱序执行(Out-of-Order Execution)**
|
||
**Tomasulo算法**
|
||
|
||
**解析**:
|
||
|
||
| 设计思想 | 是否包含 | 说明 |
|
||
|---------|---------|------|
|
||
| SIMD | 包含 | GPU计算单元采用SIMD方式执行 |
|
||
| 多线程 | 包含 | GPU以warp为单位调度大量线程 |
|
||
| MIMD | 不包含 | GPU不采用MIMD架构 |
|
||
| VLIW | 不包含 | Nvidia GPU不采用VLIW |
|
||
| 乱序执行 | 不包含 | GPU采用顺序执行(In-Order) |
|
||
| Tomasulo | 不包含 | Tomasulo是CPU中的动态调度算法,GPU不使用 |
|
||
|
||
**考点**:GPU的微体系结构设计特点,与传统CPU架构的区别。
|
||
|
||
**原理**:
|
||
|
||
1. **SIMD**:GPU的SP(Streaming Processor)以SIMD方式执行,同一指令操作多个数据
|
||
|
||
2. **多线程**:GPU采用SIMT(Single Instruction Multiple Thread)技术,以warp(32个线程)为单位调度大量线程,通过细粒度多线程掩盖访存延迟
|
||
|
||
3. **MIMD**:GPU不采用MIMD架构。GPU的设计理念是大量简单执行单元协同工作,而非多个独立指令流
|
||
|
||
4. **VLIW**:Nvidia GPU不采用VLIW(Very Long Instruction Word)。VLIW将调度工作交给编译器,而GPU采用硬件动态调度和SIMT
|
||
|
||
5. **乱序执行**:GPU采用顺序执行(In-Order),不进行动态调度。GPU通过大量warp的交替调度来掩盖延迟,而非依赖乱序执行
|
||
|
||
6. **Tomasulo**:Tomasulo算法是CPU中用于动态调度的算法(如IBM POWER系列),通过寄存器重命名和 Reservation Station 实现乱序执行。GPU不采用此技术,而是依赖SIMT和warp调度器
|
||
|
||
**GPU设计思想总结**:
|
||
- GPU追求极高的并行吞吐率,将大量晶体管用于计算而非控制逻辑
|
||
- GPU采用SIMT执行模型,结合了SIMD的效率和多线程的灵活性
|
||
- GPU通过硬件线程调度器管理大量warp,而非软件编译器调度
|
||
- GPU使用标量ISA,硬件负责将标量线程组合成SIMD执行 |