您的位置:首页 > 运维架构 > 网站架构

《大话处理器》连载——微架构(2) 顺溜流水线的深入分析

2011-08-04 22:41 393 查看
在上一节中,顺溜已经告诉了我们流水线的基本概念,顺溜将整个射击过程分成了2个步骤(术语称之为节拍),两个步骤可以并行起来执行,只是时间上进行了些许的错位,这就是流水线的本质。

这条流水线被划分成了2个节拍,也就是2级流水线,于是我们引出了流水线的第一个问题:流水线级数

众所周知,Intel处理器的流水线级数要远高于ARM、DSP等嵌入式处理器,那么流水线级数更多,有什么好处呢?

还是以顺溜来举例子,假设顺溜将射击的流水线划分成4个步骤:上膛1、上膛2、射击1、射击2 四步,由于整个过程需要10秒,那么每一个小步骤需要2.5秒。



射击的4级流水线

从图我们可以看出,现在顺溜每2.5秒就可以射出一颗子弹,于是一分钟可以消灭24个敌人,射击效率提高了一倍。如果换成计算机的术语,那就是处理器的工作频率可以提升一倍。现在大多数嵌入式处理器的工作频率在1G Hz 左右徘徊,Intel处理器的工作频率早已跳过了3G Hz,这和流水线的级数有密切的关系。总而言之,在不考虑其他因素的情况下,流水线级数越多,工作效率越高。

再回到顺溜的例子,细心的读者可能会发现:顺溜并不是要求一个人给自己上膛,而是要求两个人。从直觉来看,顺溜不仅仅是个神枪手,同时也是个快枪手,射击的速度是上膛速度的两倍。我们再来从数学的角度严谨分析一下,这也引出了流水线的第二个问题:流水线的效率问题

先修改一下上一节的假设:上膛时间为10秒,射击时间为5秒。我们再来看看射击过程:



不规则的流水线示例

从图上我们可以看出,即使是顺溜射击得再快,也要等到战友将子弹上完膛,因此顺溜有一半的时间在等待,什么事情也没有做。本着能者多劳的原则,让顺溜闲着是极大的浪费,因此我们要想办法解决这个问题。

一种解决方法是将子弹上膛细分为2个步骤——上膛1和上膛2,组成3级的流水线,如下图所示:



拆分耗时较长的步骤
采用这种方式后,相当于有两个战友给顺溜上膛,一个做上膛1这个步骤,另一个做上膛2这个步骤,再加上顺溜,这三个人组成一个流水线,可以保证顺溜5秒杀一人。

不过,很多事情是很难进一步分拆的,例如上膛就不能分成2个步骤,那么这时候怎么办呢?我们可以采取如下的策略:配备2个战友给顺溜上膛,1个10秒内就可以有2把枪的子弹上膛了,在下一个10秒内,顺溜就可以射击2次,因此也能保证顺溜5秒杀一人。这也就是顺溜要求给自己配2个人装弹的原因。



给耗时步骤配置多个重复单元

上面这个例子,进一步通用化,当一个节拍的执行时间比别的节拍长时,这时候流水线的效率并不是最高,如图:



流水线的思想可以说是用在生活中的方方面面,车间流水线是它在工业上的用途之一,科学管理之父泰勒认为:科学管理理念的精髓之一就是进行流水作业。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐