加载后的指令如何执行?

时间:2016-12-02 06:11:49

标签: pipeline cpu-architecture pipelining

管道有5个阶段。

I1

考虑使用“操作数转发” 解决方案说: -

  

说明LoadI2指令。因此,在I1完成其EXE阶段之前,无法获取下一条指令(MEM)。

但我认为:在WB阶段,处理器访问内存并选择所需的单词。在MEM阶段,它更新了注册登记处 因此,在I2阶段处理器保持对内存的控制之前,MEM将在I1 {{1}}之后开始提取。

哪一个是正确的?

尚未给出阶段描述,根据我的知识编写。

1 个答案:

答案 0 :(得分:1)

公约:

  

表示通用指令    I1 I2 I3 ,...表示具体说明。    S 表示管道的通用阶段    IF ID EX MEM WB 表示特定的管道。
   I.S 表示指令 I 处于 S 阶段的循环。

指令 I2 需要 R0 ,但该寄存器不能从 I1 准备就绪,直到 I1.WB 已经完成,假设一个基本的管道 当存在操作数转发时, I2 可以在 I1 将其写回寄存器文件时读取结果,即在 I1.WB 期间。< / p>

由于操作数是在 ID 阶段读取的,因此 I2.ID I1.WB 必须同时发生。
/> 这意味着 I2.IF 必须在 I1.MEM 的同一时间发生。

现在你对CPU在同一时钟内执行两次读取(一次用于取指令,另一次用于加载)的能力表示怀疑。
非常简单的CPU实际上会停止这种冲突(在您的示例中, I2.IF 将发生在 I1.WB )。

避免停顿的最简单方法是Harvard architecture,其中CPU从不同的内存中获取指令。

哈佛建筑has been modified通过使用缓存和预取数据和指令。
在这种情况下,只有当加载和指令获取都需要访问存储器(而不是高速缓存)时才会发生停顿。

现代桌面架构具有L1数据缓存,可以一次处理多个访问,并且CPU与它们紧密耦合,以便可以同时执行两个或更多个加载/存储,与L1的负载并行指令缓存。

最后,一些现代CPU一次解码多条指令,缓解了失速问题(但并未消除)。
尽管如此,缓存可以最大限度地避免失速。