乱序执行
流水线的另一个改进策略甚至可以更高地提升CPU资源利用率。即是处理器制造商开始增加冗余处理单元(例如Intel P6已经有两个整数处理单元和两个浮点数处理单元),这让并发执行两条指令成为可能。
在Pentium Pro(P6)之前,指令以它们地出现次序顺序地进入流水线。但是当两条连续指令之间有数据依赖时,则他们不能被并行处理,必须在下一条指令执行完后,再执行下一条指令:
a = b + 1; // 1
c = a + 5; // 2
d = e + 10; // 3
f = d + 15; // 4
这个问题的解决方案是取下一条没有依赖的指令,先于有依赖的指令执行。参见下图的可视化解释:
Fig.3 乱序执行示意图左图是保持指令顺序的传统执行策略。右图通过重新排序的并发执行,指令3将先于指令2执行。
网友评论