您的位置:首页 > 其它

流水线和吞吐率

2017-07-02 14:12 113 查看
 流水线设计将原来一个时钟周期完成的较大的组合逻辑,通过切割后分由多个时钟完成,所以,该部分逻辑运行的时钟频率会有明显提升,流水线设计只在开始处理时需要一定的处理时间,以后就会不间断的输出数据,从而大大提高处理速度,所以系统的频率就提高了。

jumphigh1987 (2012-8-06 15:02:06)

9楼正解! 假如以前一个组合逻辑需要50纳秒完成,那其对外显示的就是50ns才能完成这个功能,之后每50纳秒完成这个功能。 引入流水线以后(假如分成十级,每级5纳秒),第一次这个功能需要50纳秒出来结果,之后每隔5纳秒就会输出一个结果。 以前对外显示的是50纳秒完成,此时就显示成了5纳秒完成,效率提高了10倍。 流水线就是在串行中完成了形式上的并行。

您好,这样的; 流水线的引入提高的只是得系统的Throughput (吞吐率),即全速工作时候,单位时间内执行的指令数目增加了。但是如果仅看单条指令的绝对执行时间,这个量必然是增加的:因为
每多插入一级D flip-flop必然引入sequencing overhead(中文翻译时序支出?我不知道我翻译的对不对)。 具体来说,举例子: a没流水线的时候,时钟周期最小Tclk1>=Tsetup+Tpd_critical ,每条指令一个时钟周期执行完。其中Tsetup为触发器的建立时间,Tpd_critical为关键路径的最坏传输延迟。
b假设我采用级流水线,每一级组合逻辑的critcal delay均分 (是之前critical delay的1/3, 即Tpd_critical/3) ,新时钟周期 Tclk2>=Tsetup+Tpd_critical/3 ,每条指令要花三个时钟周期执行完。当全速执行的时候,每个时钟周期结束都有一条指令处理完,而新时钟周期Tclk2明显比之前没流水线时候Tclk1小了,所以我们说吞吐率提高了。如果你只关注一条指令的实际执行时间(注意每条指令花三个时钟周期完成): 3* Tsetup+Tpd_critical/3)=
3*Tsetup + Tpd_critical 你发现绝对时间来看,单条指令执行时间反而比没流水线时候大了。多出来2个Tsetup就是所谓的sequencing
overhead。 注意实际情况可能比上述复杂,但是上述例子用来解释本问题是足够的了。 接下来还要注意一点:我们说吞吐率提高了,只是在“全速工作”的情况下。前面还有人作答提到P4的高频低能问题。其实这个问题又得从流水线的本质来解释。比如,如果由于某种原因processor就是没法全速工作怎么办?这种情况还不少见:比如我们有指令1指令2指令3,其中 指令2的执行依赖于指令1的结果,然后指令3的执行又依赖于指令2的结果。当出现这种情况时候,必须等前面一条指令完全执行完毕,产生结果之后,下条指令才能开始执行。当这种情况出现过多的时候,流水线的存在不仅没有多大帮助,反而因为多出来的sequencing
overhead让性能降低。 总之,很多关于计算机硬件的问题如果想要究其本质,需要离开你平时所工作的level
of abstraction(抽象层级)到更加底层的层次中去。

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

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

通过流水线时空图,我们观察到,当流水线每个阶段都开始工作后,每一个时钟周期都会有一个结果的输出,也就是说K阶段流水线的吞吐量即是时钟频率,而K阶流水线的延时是对所有寄存器公用的时钟周期的K倍

同时我们也可以观察到,所有的流水级都只花费一个时钟周期的时间,因此,时钟周期必须能够满足最慢操作的执行需要

因此我们可以得出
指令执行时间(流水线)=指令执行时间(非流水线)/流水线级数

即在理想情况和有大量指令的情况下,流水线所带来的加速比与流水线的级数近似相同。例如一个5级流水线能够获得的加速比接近于5。

而这样一种技术如果用到电脑里面岂不能提高性能啦?没错,我们现在的电脑里面跑的CPU就用到了流水线技术,通过这样的一种技术,提高了指令的吞吐率,从而带来了性能的提高。注意:流水线所带来的性能提高是通过增加指令的吞吐率,而不是减少单条指令的执行时间实现的。为什么呢?这就好像洗衣服,干衣服用的时间没变,但是最终的产出却是增加了的道理一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: