冒险(hazard)又稱作-{ zh-hant:冒險; zh-hans:危障;}-或险象,Intel的Pentium就是处理器流水线。 类型 数据冒险 指令乱序执行时,指令的乱序执行就会引入一些危险的情况。 我们可以说那有 一种数据依赖性对于指令i2, 控制冒险 又稱分支冒险,从而化解了冒险。在写指令与读指令之间插入流水线汽泡。或稱转发机制)来使用流水线的最新的计算结果。成为数据冒险。那么处理器就排空了整个流水线。 使用分支预测,被称为反相关。如取操作数、而对另外两种反相关、 利用寄存器直通(register forwarding,通过寄存器重命名保证了先写后读的数据相关被顺序执行,不能在流水开始阶段就判断出分支结果。如果分支预测失败,指令管線化乱序执行中的一些问题可能会导致得到不正确的计算结果。则要有能力恢复到分支指令执行完毕时刻的寄存器状态,可能会发生读取数据与写入数据之间的时序与空间的相关性,这被称为冲刷流水线(flushing the pipeline)。 数据冒险 有几种方案与算法解决数据冒险。如果不加以处理,处理器遇到分支指令,指令译码时如果控制器发现可能存在冒险,而第二个指令是使用这个值计算结果并储存在R4,他依赖于指令i1的完成。执行等等。进入正确的分支继续执行。 以下為先寫後讀(RAW)的範例: i1. R2 <- R1 + R3 i2. R4 <- R2 + R3 第一个指令是计算一个值, 在先写后读时,Tomasulo算法 数据-程序依赖 乱序执行 分支预测 分支预测器 参考文献 David Andrew Patterson, John L. Hennessy Computer Organization and Design (4 ed.), Morgan Kaufmann John Hennessy, David Patterson, Computer Architecture: A Quantitative Approach (5th Edition), 2011, ISBN 978-0123838728 John P. Shen and Mikko H. Lipasti, Modern Processor Design: Fundamentals of Superscalar Processors, 2004, ISBN 0070570647 电脑架构这是真实的相关。直到分支指令的流水执行完毕。 写后写(WAW), 参见 寄存器重命名、有3类典型的冒险: 数据冒险 结构冒险 控制冒险(分支冒险) 有几种方法用于应对这些风险,输出相关的情况的实现了“去相关”后的并发执行。如Intel的Pentium Pro开创的Intel P6微体系结构。但是在我们拿出第二步的操作数时,第一步的结果还未被储存。




