一、流水线原理介绍
处理器流水线是一种用于提高处理器性能的技术,它将指令执行过程分成多个阶段,并允许同时处理多条指令。每个阶段都执行处理器指令执行过程中的一个特定部分,使得多条指令可以同时处于不同的执行阶段,从而提高了处理器的效率。
当我们把洗车过程比作一个流水线时,可以将其分为几个阶段,类似于处理器流水线的概念:
准备阶段(Fetch): 在这个阶段,你准备好所有需要用到的洗车工具和清洗用品,比如水桶、洗车液、海绵和刷子。这类似于处理器从内存中提取指令并准备执行的过程。
清洗车身阶段(Decode): 在这个阶段,你开始清洗车身,使用海绵和洗车液擦拭车表面,去除污垢和尘土。这类似于处理器对指令进行解码,并准备好执行所需的操作。
清洗车轮阶段(Execute): 在这个阶段,你专门清洗车轮,使用刷子和水冲洗掉轮胎上的泥土和刹车灰。这类似于处理器执行指令所需的实际操作,如算术运算或数据传输。
冲洗阶段(Memory Access): 在这个阶段,你用水冲洗整个车身,确保所有清洗剂和泡沫都被冲洗干净。这类似于处理器从内存中读取或写入数据的过程。
擦拭和上光阶段(Writeback): 在这个阶段,你用软布擦拭车身并上车蜡,使车身光亮。这类似于处理器完成指令执行,并将结果写回到寄存器或内存中。
整个洗车过程可以看作是一个流水线,通过分阶段的处理,你可以同时进行不同的操作,提高洗车的效率,就像处理器流水线提高了处理器的性能一样,而要付出的代价是什么呢?每个不同的阶段之间的延迟和额外的人工成本(硬件成本)。
所以流水线化的一个重要特性就是提高了系统的吞吐量, 也就是单位时间内服务的顾客总数(单位时间执行指令的总数), 不过它也会轻微地增加延迟,也就是服务一个用户所需要的时间(一条指令执行所需要的时间)。
二、实例分析
一个执行某种计算的逻辑和一个保存结果的寄存器组成,时钟信号控制在每个特定的时间加载寄存器。这里假设这个计算逻辑需要300ps(皮秒,即10^(-12)s),加载寄存器需要20ps。
(一)、未流水线化的
GIPS是每秒千兆条指令(每秒十亿条指令),用这个单位来描述吞吐量。而吞吐量的倒数为延迟,就是一条指令完整执行所需要的时间,在这里是320ps,吞吐量为3.12GIPS。
(二)、流水线化的
在各个阶段之间放上流水线寄存器,这样每条指令都会按照三步经过这个系统, 从头到尾需要三个完整的时钟周期。操作1执行完A阶段,操作2就可以进入B阶段了,这样在稳定状态下,三个阶段都是活动的。在这个系统中,时钟周期是100ps+20ps=120ps,延迟是120ps *3 = 360ps,计算的到吞吐量是8.33GIPS。
可以看到,我们将吞吐量提高到8.33 / 3.12=2.67倍,代价是增加了一些硬件成本,和由于流水线寄存器造成的少量的延迟(360 / 320 = 1.12)。
(三)、流水线的局限性
1)不一致的划分
通过所有的阶段的延迟和仍为300ps,但是将三个阶段分别划分为50ps、150ps、100ps,又因为时钟速率有是由最慢的阶段的延迟决定的,即必须设置为150ps+20ps=170ps,这样的话,A阶段会空闲100ps,C阶段会空闲50ps,吞吐量为5.88GIPS,延迟为510ps。
2)流水线过深, 收益反而下降
将计算分为6个延迟为50ps的阶段,这个系统的时钟周期为50ps+20ps=70ps,吞吐量为14.29GIPS,虽然我们将每个阶段计算时间缩短了两倍,但是吞吐量只提高了14.29/8.33=1.17,这是因为流水线寄存器的存在,导致吞吐量没有加倍,可以看出,随着流水线的加深,流水线寄存器的延迟成为了吞吐量提高的限制性因素。