啊
TODO1:为什么果壳不在 IDU 阶段读出寄存器?而要在后端?是跟超标量、乱序有关系吗?
TODO2: 修改PC难道比修改其它寄存器更快吗?
TODO3: 长流水线有什么缺点?
TODO4: 需要两个存储器吗?优缺点?
TODO5: 气泡指令是什么?为什么可以起到阻塞的作用?比起直接阻塞有什么优缺点?
很重要的一点:并不是所有指令都需要访问内存
----------------------------- 笔记开始 ----------------------------------
4.5 中的关键部分
冒险:流水线有这样一种情况,在下一个时钟周期中下一条指令不能执行。这种情况称为冒险(hazard)
1. 结构冒险:因缺乏硬件支持而导致的冒险。比如指令和数据在同一个存储器里,无法同时取指和读数据。(可以用 I-cache 来解决)
2. 数据冒险:也称为流水线数据冒险(pipeline data hazard),因无法提供指令执行所需的数据而导致的冒险
对于数据冒险来说,可以使用 前递(forwarding) 和 旁路(bypassing) 来解决
但即便使用了前递和旁路,在 取数-使用 型数据冒险(load-use data hazard) 中,依然得阻塞一个阶段 (4.7 会讲讲怎么处理这种复杂阶段)
3. 控制冒险(control hazard/ branch hazard): 由于jmp和branch指令的存在,指令地址的变化有时并不是流水线所预期的,如果取到了错误的指令,就会导致冒险
标签:笔记,阻塞,hazard,指令,接口,流水线,第五版,冒险 From: https://www.cnblogs.com/yinhuachen/p/17240321.html