首页 > 编程知识 正文

8086的流水线技术如何实现,在DSP中什么是流水线技术

时间:2023-05-04 12:22:32 阅读:109500 作者:4803

管道”一词源于工厂内部,是pcdxs为提高产品产量而采用的技术。 我们先不去看他的定义,我们从生活中的例子来理解什么是流水线技术。

假设有很多要洗的衣服,有洗衣机和洗衣机。 洗衣机30分钟,洗衣机60分钟。 洗一桶衣服,如下图所示。

很明显,总时间=洗涤时间=干衣时间=90分钟

那把洗好的衣服装满一桶怎么样? 我们比较以下两个方案。

方案1 :

很明显,这个方案的总时间是N*90分钟。

当然,我们也没那么傻。 洗衣机工作的时候,我们为什么要让洗衣机闲着? 本着这种想法,我们得出了方案2 :

padding-top:0px; padding-bottom:0px; color:rgb(85,85,85); font-family:Arial,Verdana,'BitStream vera Sans',Tahoma,Helvetica,sans-serif; font-size:16px; line-height:28px">

可以很容易得到,方案二所需总时间 = N* 干衣时间 + 洗衣时间= ( N*60 + 30 )分钟。

通过上面两个例子的对比,我们可以清楚发现方案二的好处,明显提升了系统的吞吐量,而这种提升的背后正是流水线技术的应用。那么在我们的数字电路中如何应用流水线技术呢?在继续这个问题之前,我们先了解两个概念:延时和吞吐量。

延时:是指从某个输入到与该输入相关联的输出变成有效之间的延迟时间。

方案一洗衣服的延时= 90分钟
方案二洗衣服的延时=120分钟(为什么是120分钟,请读者仔细思考)

吞吐量:输出或者输入的处理速率。

方案一洗衣服的吞吐量= 1/(90分钟)
方案二洗衣服的吞吐量=1/(60分钟)(为什么是60分钟,请读者仔细思考)

好,言归正传,再返回到电路上。如下图所示的组合逻辑电路:

电路的延时为t,吞吐量为1/t。工作时序如下图示意:

对于上面的电路,当H执行计算的时候,F和G是处于闲置状态的,仅仅为保证各自的输出不变,那么我们能否让F、G走出这种状态而充分利用他们呢?如果让F和G走出了闲置状态,那么如何保证他们的输出不变呢?思考后,我们很容易联想到数电中的寄存器,没错,通过寄存器来保证输出的不变,于是我们得到电路如下:

假定F、G、H的传播延迟分别为15、20、25ns,我们使用的是理想的0延迟寄存器,于是我们可以得到相关的延时和吞吐量
未加寄存器: 延时45 , 吞吐量1/45 ,加了寄存器:延时50,吞吐量 1/25。在H对Xi执行计算的过程中,F和G就可以工作在输入Xi+1上,即可以接受Xi+1时候的输入,这时H的计算和F、G的接收就是并行的了。对比前面的洗衣机例子,这里正是一个流水线的应用,而且是一个二阶流水线,至于为什么是二阶流水线,接着往下看。

下面我们再换个角度看看流水线,也就是流水线时空图,如下:

在谈这张图之前,我们再看一个概念:K阶流水线。

K阶段流水线(“K流水线”)是一个非循环电路,对应于从输入到输出的每一条路径恰好有K个寄存器。因此前面的电路为啥是2阶应该清楚了。通时,我们还可以知道,1、组合逻辑电路是0阶流水线;2、在K阶段流水线中,每个流水线阶段的输出(而不是输入)都有一个寄存器。好,我们接着谈上面的流水线时空图。

通过流水线时空图,我们观察到,当流水线每个阶段都开始工作后,每一个时钟周期都会有一个结果的输出,也就是说K阶段流水线的吞吐量即是时钟频率,而K阶流水线的延时是对所有寄存器公用的时钟周期的K倍
同时我们也可以观察到,所有的流水级都只花费一个时钟周期的时间,因此,时钟周期必须能够满足最慢操作的执行需要
因此我们可以得出
指令执行时间(流水线)=指令执行时间(非流水线)/流水线级数
即在理想情况和有大量指令的情况下,流水线所带来的加速比与流水线的级数近似相同。例如一个5级流水线能够获得的加速比接近于5。

而这样一种技术如果用到电脑里面岂不能提高性能啦?没错,我们现在的电脑里面跑的CPU就用到了流水线技术,通过这样的一种技术,提高了指令的吞吐率,从而带来了性能的提高。注意:流水线所带来的性能提高是通过增加指令的吞吐率,而不是减少单条指令的执行时间实现的。为什么呢?这就好像洗衣服,干衣服用的时间没变,但是最终的产出却是增加了的道理一样。

文章出处:http://www.brieftime.net/articles/tag/%E6%B5%81%E6%B0%B4%E7%BA%BF%E6%8A%80%E6%9C%AF

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。