流水线中的相关培训教程[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%
相关阅读:
- [电子说] 多周期cpu的设计思想是什么?怎样实现cpu多流水线? 2023-10-19
- [电子说] 单周期cpu和多周期cpu的区别 多周期cpu和流水线的区别 2023-10-19
- [电子说] 大模型时代,如何搭建数据的“智能化流水线”? 2023-10-16
- [电子说] ARMv7-A架构学习笔记:通用寄存器与流水线 2023-10-16
- [PCB设计] 简单平行式结构贴片机 2023-09-26
- [模拟技术] 流水线ADC结构解析 流水线ADC和其它ADC的比较 2023-09-26
- [电子说] 流水线ADC的内部结构和工作原理是什么 2023-09-26
- [电子说] 流水线Andon安灯呼叫系统解决方案及应用背景 2023-09-25
( 发表人:admin )