Data hazards, Structural hazards, Control hazards
Structure Hazards

- 结果:部分指令必须等待资源释放,导致流水线停顿(插入气泡),降低效率。
- 核心原因:处理器中某些硬件资源(如内存、功能单元)被设计为单例或数量有限,无法满足多条指令的并行需求。
示例1:冯·诺依曼架构的内存冲突
- 背景:在冯·诺依曼架构中,指令和数据共享同一内存。
- 冲突过程:
- IF阶段(取指):需要从内存读取下一条指令。
- MEM阶段(访存):需要从内存读取或写入数据。
- 冲突发生:当两条指令分别处于IF和MEM阶段时,同时请求访问内存,但内存只能响应一个请求。
- 解决方案:
- 哈佛架构:分离指令内存和数据内存(如CPU的L1缓存分为指令缓存I-Cache和数据缓存D-Cache)。
- 内存调度:通过优先级仲裁决定哪个阶段先访问内存。
示例2:连续除法指令的冲突
- 背景:除法器(Divider)是复杂功能单元,通常需要多周期完成操作且数量有限。
- 冲突过程:
- 第一条除法指令进入执行阶段,占用除法器。
- 第二条除法指令紧随其后,发现除法器已被占用,必须等待。
- 解决方案:
- 插入气泡:暂停后续指令,直到除法器空闲。
- 增加功能单元:设计多个除法器(但增加硬件成本)。
- 指令调度:编译器优化指令顺序,避免连续除法指令。

Single-cycle Data Path, Pipelined Data Path, Superscalar Data Path are all not suitable for vanilla von Neumann architecture.
Avoiding Structure Hazards

Data Hazards

Register Access Issues