流水线停顿
编辑在流水线计算机处理器的设计中,流水线停顿是为了解决危险而延迟执行指令。
详情
编辑在标准的五级流水线中,在译码阶段,控制单元会判断译码指令是否从当前执行指令写入的寄存器中读取。 如果这种情况成立,控制单元将指令暂停一个时钟周期。 它还会暂停取指阶段的指令,以防止该阶段的指令被程序中的下一条指令覆盖。
在使用程序计数器 (PC) 寄存器来确定流水线中正在获取的当前指令的冯诺依曼体系结构中,为了防止在解码阶段的指令被停顿时获取新指令,PC 寄存器中的值和 提取阶段的指令被保留以防止更改。 这些值会一直保留到导致冲突的指令通过执行阶段为止。 这种事件通常被称为气泡,类似于流体管道中的气泡。
在某些架构中,管道的执行阶段必须始终在每个周期执行一个操作。 在这种情况下,通过向执行阶段提供 NOP(无操作)指令来实现气泡,直到气泡被冲走。
例子
编辑时间轴
以下是通过 4 级流水线两次执行相同的 4 条指令,但无论出于何种原因,在周期 #2 中提取紫色指令的延迟会导致创建气泡,从而延迟其后的所有指令。
经典 RISC 流水线
下面的例子显示了一个气泡被插入到一个经典的 RISC 流水线中,有五个阶段(IF = 指令获取,ID = 指令解码,EX = 执行,MEM = 内存访问,WB = 寄存器回写)。 在此示例中,第二条指令的 EX 阶段(第三阶段)需要输入xxx条指令的 MEM 阶段(第 4 阶段)之后可用的数据。 没有气泡,EX 阶段(第 3 阶段)只能访问前一个 EX 阶段的输出。 因此,添加气泡可以解决时间依赖性,而无需及时向后传播数据(这是不可能的)。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/196082/