指令流水
相关问题:
- 数相关:第k、k+1条指令的数据地址之间有关联。
- 指令相关:第k+1条指令的内容取决于第k条指令的运行结果——解决:程序中不同意改动指令
- 控制相关:由条件分支指令、转子程序指令和中断引起的相关。
- 转移相关:第k+1条指令依赖于第k条指令产生的转移条件。
流水方式:
把一条指令的解释分解为很多其它的子过程,是重叠的延伸(重叠是分为两个过程)。
流水线时空图
流水线要经过装入、充满、排空三个阶段。
静态流水线
定义:在同一时段内,仅仅有一种任务。
样例:A*B = a1b1 + a2b2 + a3b3 + a4b4
前面四个任务是乘法,后面三个任务是加法。我们看到乘法并没有交织到加法。而是等加法运行完,再运行。
动态流水线
定义:在同一时段内。多种任务在执行(如乘法和加法同一时候执行)。
样例:A*B = a1b1 + a2b2 + a3b3 + a4b4
第一个黄色任务表示a1b1+a2b2,因为第二个黄色任务a3b3+a4b4须要a4b4结束后再进行,所以没有紧跟着前一个黄色任务。
同理,最后一个加法,要在前两个加法结束后才干进行。
吞吐率(TP)
定义:单位时间完毕的指令数(或任务数。这个任务有可能是浮点加法)。
样例:
这个样例中各功能段用时不同,受S2的制约。出现了如上图所看到的的空隙。终于TP计算式为:
当中tj为各段时间中最长的一段时间。
加速比
定义:串行用时与流水用时之比。
以下是加速比趋于无穷的情况,看来加速比是有上限的,且这个值接近于功能段数。
效率
定义:由于要完毕每一个功能段须要多个设备共同工作。在整个流水过程中,这些设备并非一直都工作,我们让全部设备实际工作时间之和与假定整个流水过程中全部设备一直工作的时间总和之比称为效率(有点摸不着头脑,看以下的样例)。
效率计算式为:
分母m*T表示时空图中m段与T(流水时间)围成的面积,分子m*n*t0表示n个任务实际占用面积之和。
假设各段时间不相等(这个样例能够參见上面的样例):
非线性流水线的调度
对于一个任务。在它的节拍中,存在至少两个节拍使用的是同一功能段,则称它为非线性流水。假设不注意前后两个任务相隔的节拍数。非常有可能发生功能段争用(如在上面吞吐量部分的时空图中,我们就不能前后两个任务相隔1拍或2拍)。为了找出这些不能使用的节拍间隔,我们引入了预约表。正如名字所看到的,一个任务说它在什么时候要使用哪一段,我预约了。随之而来的一些重要概念有:
- 禁止表F:{1,5,6,8},相邻两个任务的间隔拍数不能为1。5,6,8。
扫描每一行,该行星星之间的距离种类,如本例中第二行,星星之间相隔1、5或6,所以得出间隔拍数不能为1、5和6。
- 初始冲突向量:第i位的状态用以表示与当时相隔i拍给流水线送入后继任务是否会发生功能段的使用冲突。如不发生。0。否则,1。
C=(10110001)。
- 状态转换图:由初始冲突向量而来。将C放到一个8位逻辑右移移位器。当从移位器移出0,用移位器中的值与初始冲突向量做“按位或”,得到一个新的冲突向量。当移位器移出1,不做不论什么处理。
反复这个步骤。
对产生的每个新的冲突向量做相同处理。在初始冲突向量和全部形成的冲突向量之间。箭头连接。
- 接下来是简单循环:状态图中的环(带方向),尽管起点必须是初始冲突向量,但不一定后来也要回到初始冲突向量。仅仅要能形成一个环就可以。像(3,4,3。4...)终于的环就是在两个冲突变量之间循环。
最小恒定循环为(7)
附:更具体的有关预约表的知识參见超链接。