流水线中的相关培训教程[3]
流水线中的相关培训教程[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%
相关阅读:
- [电子说] 浅析OpenVINO 2024.5的新功能 2024-11-25
- [电子说] 工业读码器解决方案在自动化流水线上扫描条码的应用 2024-11-20
- [电子说] SMT流水线布局优化技巧 2024-11-14
- [电子说] 工业流水线的智能助手——智能计数,效率倍增 2024-11-06
- [电子说] 流水线中Half-Buffer与Skid-Buffer的使用 2024-11-05
- [电子说] 使用PVA引擎优化自动驾驶汽车CV开发流水线 2024-11-05
- [电子说] 简述光电开关在流水线上的应用BR100-DDT如计数等 2024-10-31
- [电子说] 工厂自动化流水线上安装固定式工业扫描器有什么好处? 2024-10-30
( 发表人:admin )