# 第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执行