结构冒险是指多条指令在同一时钟周期内需要使用同一功能部件,导致资源冲突。
时钟周期: 1 2 3 4 5 6 指令i: IF ID EX MEM WB 指令i+1: IF ID EX MEM WB 指令i+2: IF ID EX MEM 在时钟周期 4:指令 i 的 MEM 阶段和指令 i+2 的 IF 阶段同时访问存储器!
WB 阶段写寄存器和 ID 阶段读寄存器可能同时发生。
插入气泡(Bubble),让冲突的指令等待一个周期,降低流水线效率。
将冲突的操作安排在不同时钟周期。
| 解决方法 | 优点 | 缺点 |
|---|---|---|
| 分离存储器 | 彻底解决 | 增加硬件成本 |
| 多端口寄存器 | 彻底解决 | 增加硬件复杂度 |
| 流水线停顿 | 简单 | 降低性能 |
| 资源调度 | 不增加硬件 | 可能不适用 |
| 考法 | 解题套路 |
|---|---|
| 识别结构冒险 | 找同一时钟周期内争用同一部件的指令 |
| 解决方案选择 | 存储器冲突 → 分离存储器;寄存器冲突 → 多端口 |
| 哈佛结构 vs 冯·诺依曼 | 哈佛分离 → 无结构冒险;冯·诺依曼 → 可能有 |
| 停顿周期数计算 | 插入气泡直到冲突解除 |
| 结构冒险 vs 数据冒险 | 结构:资源不够;数据:数据未就绪 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。