计算机体系结构基础知识介绍之动态调度(包含动态调度和乱序执行)(一)

动态调度是一种硬件技术,通过重新排序指令执行以减少停顿,同时处理编译时未知的依赖。乱序执行是其关键技术,允许指令在数据准备就绪后执行,以提高性能。然而,这增加了硬件复杂度和异常处理的难度。Tomasulo算法进一步解决了反依赖和输出依赖,且支持推测执行,以降低控制依赖的影响。
摘要由CSDN通过智能技术生成

动态调度是一种硬件技术,可以通过重新排序指令执行的顺序来减少停顿,同时保持数据流和异常行为。

动态调度有几个优点。
首先,它可以让用一种流水线编译的代码在另一种流水线上高效运行,避免了需要有多个二进制文件和为不同的微架构重新编译的问题。
其次,它可以处理一些在编译时无法确定的依赖情况;例如,它们可能涉及到内存引用或数据相关的分支,或者它们可能是由于使用了动态链接或分派的现代编程环境而产生的。
第三,它可以让处理器在等待缓存未命中解决的时候执行其他代码,从而容忍不可预测的延迟。

但动态调度的优点是以显著增加硬件复杂度为代价的。虽然动态调度的处理器不能改变数据流,但它试图在存在依赖时避免停顿。相比之下,编译器的静态流水线调度试图通过分隔依赖的指令来最小化停顿,以免导致冒险。当然,编译器流水线调度也可以用于为运行在动态调度流水线上的代码进行优化。

简单流水线技术的一个主要限制是它们使用按顺序指令发出和执行:指令按程序顺序发出,如果一条指令在流水线中停滞,则后面的指令无法继续执行。 例如,考虑以下代码:

fsub.d指令无法执行,因为fadd.d对fdiv.d的依赖导致管道停顿; 然而,fsub.d 并不依赖于管道中的任何数据。 这种危险会造成性能限制,可以通过不要求指令按程序顺序执行来消除这种限制。

乱序执行是一种动态调度的技术,可以让指令在数据操作数准备好后就开始执行,而不必按照程序顺序。这样的流水线可以做到乱序执行和乱序完成。乱序执行引入了可能的WAR和WAW冒险。这些冒险可以通过寄存器重命名来避免。乱序完成也给异常处理带来了很大的复杂性。动态调度的流水线必须保持异常行为,也就是说,只有那些在程序严格按顺序执行时会出现的异常才会出现。

动态调度的处理器通过延迟通知相关的异常,直到处理器知道该指令应该是下一个完成的指令,来保持异常行为。虽然异常行为必须保持,但动态调度的处理器可能产生不精确的异常。如果处理器在引发异常时的状态不完全符合指令按顺序执行的情况,就会出现不精确的异常。不精确的异常可能由两种情况造成:
1. 流水线可能已经完成了一些在程序顺序上比引发异常的指令更后面的指令。
2. 流水线可能还没有完成一些在程序顺序上比引发异常的指令更前面的指令。
不精确的异常使得在异常后重新开始执行变得困难。

对于浮点异常,也有其他的解决方案。为了实现乱序执行,我们基本上把简单五级流水线中的ID阶段分成两个阶段:1. 发射——解码指令,检查结构冒险。2. 读操作数——等待没有数据冒险,然后读操作数。一个指令取指阶段在发射阶段之前,它可以取指到一个指令寄存器或者一个待处理指令队列;然后从寄存器或队列中发射指令。执行阶段在读操作数阶段之后,就像在五级流水线中一样。执行可能需要多个周期,取决于操作。

区分指令开始执行和完成执行的时刻;在这两个时刻之间,指令处于执行中。

流水线允许多个指令同时处于执行中;如果没有这种能力,动态调度的一个主要优势就会丧失。让多个指令同时处于执行中需要多个功能单元、流水线功能单元或者两者都有。因为这两种能力——流水线功能单元和多个功能单元——对于流水线控制来说本质上是等价的,我们将假设处理器有多个功能单元。

在动态调度的流水线中,所有指令都按顺序通过发射阶段(按顺序发射);但是,它们可以在第二个阶段(读操作数)被阻塞或者绕过彼此,从而乱序进入执行。记分板是一种允许指令乱序执行的技术,当有足够的资源和没有数据依赖时;它是以CDC 6600记分板命名的,它开发了这种能力。

下一篇博客会重点介绍一种更复杂的技术,叫做Tomasulo算法。主要区别是Tomasulo算法通过有效地动态重命名寄存器来处理反依赖和输出依赖。另外,Tomasulo算法可以扩展到处理推测,一种通过预测分支的结果,执行预测目标地址的指令,并在预测错误时采取纠正措施来减少控制依赖影响的技术。虽然使用记分板可能足以支持更简单的处理器,但更复杂、更高性能的处理器会使用推测技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D了一天bug忘了编译

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值