为了在猜错时能尽快回复到原分支点,转入另一分支,在沿猜测路径向前流动的同时,还可以由存贮器预取转移成功分支的头几条指令放在转移目标指令缓冲器中。以便在猜错时,不必从访存取p开始,减少了流水线的等待时间。 4.4.2 加快和提前形成条件码
尽快、尽早获得条件码以便提前知道流向哪个分支,是会有利于流水机器简化对转移的处理的。这可以从两方面采取措施。
一是加快质疑教学内部条件代码的形成,从指令执行前结束,形成反应结果的操作条件码。例如,结果是积极的,消极的和无条件的代码可以在手术前形成。amdahl470v / 6英寸按照这个思路,在流水线的操作输入装置设置运气,几乎可以确定其条件指令代码,以便具体操作可操作的结果状态代码的指令发送到分析组件。
另一方面是在一个程序预先形成的条件代码,这是特别适合回收计划在判断是否循环继续,转让的情况。例如,FOR TRAN做周期,执行循环终端语句,总是对循环控制数减1,如果降低的结果for0out的回路,或继续循环身体的一部分,这是通常使用的1和2等于零的条件转移指令的实现。为了使等于零的条件转移指令的条件代码可以形成,可以减少to1of事前指示和不相关的其他指令之前,甚至在推进到循环开始。
4.4.3 采取转移延迟
这是一个软件方法静态指令调度技术。没有额外的硬件,在编译目标教学计划,将转移指令和前面不相关的一个或多个指令交换位置,让成功转移一直延迟到一个或一个以上的指令执行后。这样,可以使转移造成的性能损失降低到0。
4.4.4 加快短循环程序的处理
一个小於长度的指令缓冲区容量可以短期循环程序整个一次性到指令缓冲区,并暂停预取指令执行周期,避免指令预取指令缓冲区循环指令执行被开发,可以减少内存存取重复取号;但因为循环分支概率高,所以退出循环结束的条件转移指令不断猜测循环分支,由于减少了条件分支线断线造成机会。
有些机器也要执行,让预取指令都在正常使用的指令缓冲区,转移到目标指令缓冲区。在检测周期,可以转移到指令缓冲区的内容作为短周期控制程序,消除了第一个周期,再从主内存和短周期中的程序指令操作的开销。有些机器允许的指令缓冲寄存器连接使用,允许更大的循环程序也可以加速处理。
第五章 中断处理与流水线调度
中断处理和非线性流水线及多功能流水线调度问题也是设计指令流水线时非常值得注意的两个大问题,在本章,我们将对这两大问题进行初步的研究。
5.1 中断处理
中断导致线路断开。然而,它的概率比条件的概率要低得多,这也是一个随机事件。因此,机加工中断是如何处理现场的保护和断点恢复,而不是如何缩短线路断开时间。
在执行指令在我中断,应在执行结束指令指示我,我+1已经没有开始执行的地方,但水是在同一时间机器解释多个指令,指示我,我+ + 1?可能已进入流水线和部分解释。一个流,其中的一些指令流的命令我吧。
早期水机,如360/ 91,为简化中断处理,采用不精确断点”方法。无论是否命令我,线路中断,不再允许后续指令尚未进入进入,但已在流水线不断流动的所有指令执行,然后转移到中断处理程序。在这方面,断点当然不会是我,可能
背后我+ 1,2 + 1?断点是不确定的。只有当指令在第一段中断时,我的反应,断点是准确的。
这种“不精确断点”方法不好的编程和程序的调试。后来,水机多采用“精确断点”的方法,如amdahl470/ 6。无论我在教学中,响应中断,中断处理程序领域所有相应的我,我到流水线指令的原始场均可以恢复。这种方法需要许多支持注册,保证线路的每个指令能够恢复原来的领域。如前所述,这些寄存器也”指令重试”,不需要另外设置。
5.2 流水线调度
由于线性线在每个任务的执行,每个通过只有一个,所以每个镜头都是一个新的任务,这些任务的线,没有竞争相同的水段。非线性流水线是不同的。因为部分是安排之间的反馈回路,一个任务在运行过程中,可反复通过同一段或在一定的时期。所以,如果每一次的线到一个新的任务,将产生几个任务竞争同一时期使用的功能冲突现象。为了不冲突,有适当的间隔数目的节拍,以进入下一个任务。什么间隔几个电影和进入下一个任务,既不能正常使用的部分的冲突,而且还可以使线有一个较高的吞吐量和效率,这是流水线调度问题需要解决。 为了能对流水线的任务进行优化调度和控制,1971年 E.S.Ddavidson 提出使用一个二维的预约表。(如图5.1) 图5.1 预约表示例 根据预定表可以很容易地得出一个任务使用所需的间隔数目的节拍。为例一节分隔的3pat,2segments分隔3beat。然后的任务是打到流水线将与the1section和2节。我们将在所有章节的桌子上一个任务流将竞争同一时期的时间间隔几个在一起,构成一个延迟表F如为{ 3.4}。也就是说,如果线不会出现在每一节的争夺冲突,相邻的任务线间距击败不能是3,4,间隔应被禁止使用击败。另一个
冲突向量的概念,这是一个n-1bit向量(??),我位状态表明,我拍线区间为后继任务是否发生的功能部分使用冲突。如果不发生冲突,使位是“0”;否则,该位是“1”,表示禁令。
不难看出,进入后续任务拍摄所需的数量和任务的流水线已进行了几个电影。当第一个任务的第一枪进入流水线,根据禁止形式= {2 , 4},可以形成碰撞矢量丙(101010),表示这只是流入线时,碰撞初始向量。由此可以看出,从第一次task1,3,5shot任务为线,因为冲突向量对应于“0”,表示将不再有冲突。当次任务,应该有一个新的碰撞矢量。在决定第三个任务可以分开的许多射进线,不仅进入了一个行的第一次任务,功能区,这样的顺序类推。
怎样判断一个向量的冲突?与线第一个任务在每个推进,原本从二任务为线在不同的时间间隔对应观看心跳。这意味着,碰撞初始向量移位,抓住每一个逻辑right1,左移到空的“0”,表示如果间隔6拍到后续任务,一个任务必须是脱节的无功能组件使用冲突。因此,随着任务的路线前进,将继续构成的动态冲突矢量。如果你选择在第一次任务的间隔1shooting进线,次任务,冲突矢量右移1became(010101)。因此为了使第三个任务为线,既不与第一个任务冲突,也不与任务冲突,新的冲突矢量应该是第一任务目前的初始向量冲突(010101)和一次任务中的碰撞初始向量(101010)由一个“,或”的结果(111111)的。因此,根据前面的一个向量的冲突和冲突后,向量。
按照这样的思路,以各种可能的拍数流入新的任务,从而又可以产生新的冲突向量,一直进行到不再产生不同的冲突向量为止。由此可以画出用冲突向量表示的流水线状态转移图。本例的流水线状态转移图如图(5.2)
图5.2 状态转移图
因此,只要按流水线状态图中由初始状态出发,能构成一种间隔拍数呈周期性重复的方案来进行流水线调度,都不会发生功能段的使用冲突。然而,我们还希望能寻找一种最佳的调度方案,以便使流水线的吞吐率最高。显然,只需要分别计算出每种调度方案的平均间隔拍数,或者称之为平均启动距离,找出其中最
小者,就是流水线各后续任务流入流水线所用间隔的最佳调度。本例的几种调度方案如图(5.3)
简单循环 (1,7) (3,7) (5,7) (3,5,7) (5,3,7) (3,5) (5) (7) 图5.3 调度方案
平均启动距离 4 5 6 5 5 4 5 7
以上只是结合单功能流水线讨论了有关流水线调度的基本思想和方法。在此基础上不难解决多个功能流水线的调度。对于一个多功能流水线,只需要将对应每种功能的预约表都重叠在一起,组成一张新的预约表,然后在按照此方法进行调度即可。
第六章 总结与展望
流水线技术是一项可以应用于任何ISA的微体系结构技术。RISC体系结构的特性确定确实能够使流水线的设计更加容易。流水线技术已经被证明是提高处理器性能的一项十分强大的技术,并且在流水线深度方面仍然有很多上升空间。不难想象,以后还会有更深的流水线出现。
流水线性能的主要障碍是指令相关引起的流水线停顿。其中,控制相关引起的分支开销是最主要的部分。随着流水线深度的增加,分支开销也会增大并成为主要的挑战。另外,流水线处理器设计将传统CPU设计中的数据通路设计和控制通路设计放到了一起进行处理,它们可以被合并到一条流水线来实现。