您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子百科>电脑硬件>台式机>

流水线中的相关培训教程[3]

2010年04月13日 16:02 www.elecfans.com 作者:佚名 用户评论(0

流水线中的相关培训教程[3]

(1) 写后读相关(RAW:Read After Write) (命名规则) :j 的执行要用到 i 的计算结果,当它们在流水线中重叠执行时,j 可能在 i 写入其计算结果之前就先行对保存该结果的寄存器进行读操作,从而得到错误的值。这是最常见的一种数据相关,图3.3.6和图3.3.7中采用定向技术消除的数据相关就属于这种类型。

    (2) 写后写相关(WAW:Write After Write ):j 和 i 的目的寄存器相同,当它们在流水线中重叠执行时,j 可能在 i 写入其计算结果之前就先行对该结果寄存器进行写操作,从而导致写入顺序错误,在目的寄存器中留下的是 i 写入的值,而不是 j 写入的值。

    如果在流水线中不只一个段可以进行写操作,或者当流水线暂停某条指令时,允许该指令之后的指令继续前进,就可能会产生这种类型的数据相关。由于 DLX 流水线只在 WB 段写寄存器,所以在 DLX 流水线中执行的指令不会发生这种类型的数据相关。如果我们对DLX流水线作如下改变,在DLX流水线中执行的指令就有可能发生WAW相关。首先,将 ALU 运算结果的写回操作移到 MEM 段进行,因为这时计算结果已经有效;其次,假设访问数据存储器占两个流水段。下面是两条指令在修改后的 DLX 流水线中执行的情况:

    可以看出,在修改后的 DLX 流水线中执行上述指令序列后,寄存器 R1 中的内容是第一条指令(LW)的写入结果,而不是 ADD 指令的写入结果。这就是由于 WAW 相关所带来的错误执行结果。

    (3) 读后写相关(WAR:Write After Read ):j 可能在 i 读取某个源寄存器的内容之前就先对该寄存器进行写操作,导致 i 后来读取到的值是错误的。

    由于 DLX 流水线在 ID 段完成所有的读操作,在 WB 段完成所有的写操作。所以,在 DLX 流水线中不会产生这种类型的数据相关。基于上面修改后的 DLX 流水线,考察下面两条指令的执行情况:

    如果 SW 指令在 MEM2 段的后半部分读取寄存器 R2 的值,ADD 指令在 WB 段的前半部分将计算结果写回寄存器 R2,则 SW 将读取错误的值,将 ADD 指令的计算结果写入存储器中。值得注意的是,在读后读(RAR: Read After Read)的情况下,不存在数据相关问题。

4. 需要暂停的数据相关

    前面我们讨论了如何利用定向技术消除由于数据相关带来的暂停。但是,并不是所有数据相关带来的暂停都可以通过定向技术消除。

    为了保证流水线正确执行上述指令序列,可以设置一个称为流水线互锁(pipeline interlock)的功能部件。一旦流水线互锁检测到上述数据相关,流水线暂停执行LW指令之后的所有指令,直到能够通过定向解决该数据相关为止。

图3.3.12为流水线互锁插入暂停后流水线数据通路;

    图3.3.13是 加入暂停前后的流水线时空图。

 

非常好我支持^.^

(2) 100%

不好我反对

(0) 0%

( 发表人:admin )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!