当前位置:首页 > 知识库 > 正文

快手平台网站免费

客服   快手平台网站免费  第1张 拼多多砍价dy抖音ks快手 自助商城点击进入

作者简介:刁同学身为后浪,毅然投身祖国的IC大业,虽毕业未久,但是在处理器设计领域颇有心得,尤其精通riscv。

一、流水线简介

在开始讲解流水线技术之前,先简单讲解一下处理器的操作。不管是高性能处理器还是低功耗处理器,都离不开四个基本操作:取指(Instruction Fetch,IF)、译码(Instruction Decode,ID)、执行(Execute,EXE)、写回(WriteBack,WB)。这四个操作是处理器的根本,高性能处理器在这五个操作上进行增加,比如在执行之前会有发射、重命名、分发操作,还比如现阶段都会添加访存(Memory,MEM)这一操作。低功耗处理器则是在这四个操作上进行合并,比如将译码和执行合并为一段,就是一个三级流水线的处理器。

接下来开始细讲流水线技术。流水线这个词听到最多的地方就是工厂,工厂为了提高效率,让每个人或者一批人专门负责某一项工作,不同的环节由不同人负责,一个产品就像流水一样就被造就出来了。流水线的好处是,工厂有多少个环节,最多就可以同时造多少个产品,虽然不是同时完成多个产品,但至少有这么多产品在开始生产了。为了不让其余资源空闲,所以处理器也引入流水线技术。流水线(pipeline)是Intel首次在486芯片中开始使用的。

如果不采用流水线操作,则上图执行n条指令需要花费4n个时钟周期,若采用流水线技术则需要4+n-1,即n+3个时钟周期。n是大于等于0,很明显,使用了流水线之后所需要的时间会越来越少,能够大大提高CPU的运行效率。

二、深流水线简介

现在的高性能处理器都基本使用了深流水线,何为深流水线,就是流水线的级数比较多,不止五个流水段。现在一般以经典五级流水线(IF/ID/EXE/MEM/WB)为分界线,比五级多,就一般为深流水线。深流水线的好处在于,可以提高频率。例如英特尔为了提高频率,一般把流水线都做到了二十级以上。

流水线变深后,即把每一个操作细化,在每一级做的事情就少了,每一级的路径就会变短,即可把时钟频率提高了。时钟频率是否能提高更多的体现在时序分析时,把频率提高后,时序不会出现违背情况。

当然,流水线并不是能够一直深下去。深流水线虽然能够提高频率,但是对于性能的提升并不一定有效。例如分支预测失败后,深流水线可能会带来更大的惩罚。例如数据相关性的指令太多,可能会带来流水线更多的气泡(气泡就是流水线并未有效执行的指令,在两条存在数据相关性的指令中,需等待前一条指令的结果,给后一条指令所需真正数据去执行,等待过程中流水线还是在工作,只不过是无效工作。无效工作的这几个周期就叫做气泡)。当初上演过AMD的速龙64CPU依靠较低的主频狂虐高主频的奔4E、奔腾D系列的处理器。ARM公司也经过评估,顺序处理器最多到8级流水,所以cortex A53、A55处理器都是一个八级流水的处理器。

架构师如何分析出深流水线的级数对性能的影响,这是需要经过多方面的评估。例如分支预测的正确率,例如相关性的分布情况等等,在不同的场景,可能不同的架构会有不同的应用,面对不同的程序,可能性能又会不一样。面对通用架构和专用架构,也会不一样。

快手平台网站免费  第2张

三、超标量简介

从时间维度来看cpu 流水线技术,深流水线是提高了指令并行,但是从本质来看,其实深流水线并不能叫并行处理,因为指令还是一条一条的执行,只不过是CPU各个部件的利用率变高。而超标量技术就会去提高指令的并行度。

何为超标量,即有多条流水线,多条指令在同一时间可以并行执行。超标量处理器一般拥有两套甚至多套执行单元,即译码完成后,两条或多条指令被同时送入不同的执行单元,同时进行运算

超标量可以理解为通过面积换性能的方式,增加执行单元获得指令的并行执行,从而提高性能。当然,超标量并不能无限制的去增加运算单元。这样的话,岂不是我不停增加执行单元,ALU加十个,访存单元和浮点运算来一打,做一个印度飞饼这么大的处理器,性能直接起飞?

四、流水线性能的影响因素

上述有说过,流水线深度不能一直加下去,超标量的执行单元也不能一直加下去。总得有一个限度。那么为什么会有这些限度呢?

1)数据相关性

我们再来看处理器执行的本质,就是在往规定的寄存器里面写数据。这些寄存器里保存的有我们所需要运算的数据。不同的指令集规格,都规定得有相应的寄存器,软件人员在编程时,一些运算结果或者运算所需要的数据就保存在这些寄存器中。RISC-V有32个通用整型寄存器,32个通用浮点寄存器,32个通用向量寄存器。ARM有37个寄存器,其中31个是通用寄存器,6个状态寄存器。

如以上程序,以上是一个简单的程序,使用的是RISC-V的指令集。在红框内,上一条与操作指令使用了a0寄存器中的数据和3符号扩展后进行相与,将结果再写回到a0寄存器中。下一条分支指令则判断a0寄存器中的数据和10506是否相等。

在执行分支指令的时候,需要用到a0寄存器的数据,但当分支指令进入执行段时,上一条指令还在MEM段,并未将数据写回到寄存器中,所以此时分支指令取回来一个假数据。就比如我周四买了一张双色球彩票,在周四晚上我家因为隔壁偷我家wifi看不干净的东西,导致我家网速太差,刷新大半天才出来,待我定睛一看,居然号码都对上了!彻夜难眠,憧憬着我要拿这笔巨款娶几个老婆。第二天去兑奖,结果人家说这号码是周二那一期的号码,我买的是周四那一期的,并未中奖。原来是当时网速太差,没有刷新出来,想了个寂寞。

上述一类情况,叫做数据相关性,具体点叫做写后读冲突(RAW)。写后读冲突是真的数据相关性,这个情况只能想办法优化,并不能解决,这是影响流水线性能的一大因素。现在常用的一种优化方式便是数据旁路,即上一条指令在执行段完成运算后,增加一条数据旁路,将数据传回给下一条指令,给下一条指令使用。举一个例子,两位同学约定作弊,一个成绩不错cpu 流水线技术,一个成绩比较差。原计划成绩好的同学做完试卷后,交卷出去将答案发给成绩差的同学。现在发现试卷有点难,成绩好的同学做完后,怕是没时间去发答案了,因为现在考场有手机信号屏蔽器,需要走到远一点的地方发答案,就做完的同时,把答案写在纸条上,传给成绩差的同学,成绩好的同学又去交卷走人。这种传纸条的方式就叫做数据旁路。

数据相关性还有写后写冲突(WAW)和读后写冲突(WAR)。这两类是假数据相关性。在顺序执行时不用考虑这两类冲突,因为并不会出现。但是在乱序执行时,就得考虑这个问题了。一般解决这两类相关性都使用寄存器重命名的方式去解决规避,即本质是扩大寄存器数量。先将数据写在另外一个寄存器里面,等前一条指令完成,再将新的数据搬移过去就行。

2)分支预测的性能

快手平台网站免费  第3张

分支预测也是影响处理器流水线性能的一大因素。分支预测若预测成功,则没太大影响。若预测失败,会导致处理器重新设定PC,然后取指令运行。导致损失几个时钟周期,若流水线越深,带来的惩罚越大。

五、总结

对于现在的时代来说,个人觉得单处理器的性能提升可能并不那么重要了。专业的事情交给专业的东西去做。现在是异构时代,对于数据的处理,可以交给xPU去做,它们更擅长数据的运算。CPU仅需要负责协调控制好整个系统的运作,做一些协调及控制即可。就如同一个公司的运作,不同的事情交给不同的部门去做,CEO只需做工作的协调安排,以及一些重大事务的决断而已。所以,个人觉得,RISC-V指令集更多的机会在于同各加速单元或者说各xPU的协调控制上,复杂指令集或自定义指令集是发展的必然道路。

【后续更精彩】

祝大家周末愉快!

发表评论

最新文章

推荐文章