本发明专利技术提供了一种使用在嵌入式CPU中的,用于减少程序跳转开销的方法及其电路实现。该方法通过在跳转地址查找表项中,加入历史计分值,将表项进行分值比较,从而将最常发生的跳转目的地址保留在查找表项中,从而有效减少跳转的延迟开销。该方法在硬件实现上,采用CPU经典缓存(Cache)结构,并以计分值大小作为表项替换依据。
A method and circuit for reducing program jump cost in CPU
【技术实现步骤摘要】
一种CPU中用于减少程序跳转开销的方法及电路
本专利技术属于集成电路中的嵌入式处理器
,尤其是涉及一种CPU中用于减少程序跳转开销的方法及电路。
技术介绍
CPU(中央处理器)的核心功能是读取并执行软件程序指令。读取并执行指令的第一步就是取指,即CPU向总线或存储设备发出目标指令的地址,总线或存储设备根据CPU发出的地址,返回目标指令给CPU的过程。程序一般是顺序读取并执行的,直到发生程序的跳转。也就是说,取指时目标指令的地址是顺序递增的,直到遇到跳转指令。从CPU发出地址,到总线或存储设备返回目标指令,是有一定延迟时间的。为了整体上在一定时间内尽量多的取指,CPU通常采用流水线的方式发出地址和接受指令,如图1所示。CPU在时间t0发出目标地址0,在下一个cycle(时钟周期)不等指令0返回,就继续顺序发出地址1,如此下去。当总线或存储设备返回目标地址0所对应的指令0时,CPU已流水线化地发出了d个地址,即CPU的取指延迟是d。如果指令0经过CPU译码,发现正好是一条跳转指令,它的执行会将CPU的下一条指令的目标地址跳转到了一个新的地址n,那么时间t(d+j)之前发出的地址和已经取得的指令,就都作废了。CPU重新流水线化地发出地址n及其后续地址。当指令n进入CPU时,时间已经过去了t(d+j+d)了。总结起来,一条跳转指令,使得CPU相对浪费了d+j个cycle,其中d是取指延迟时间,j是跳转指令译码和目标地址的计算时间。程序的跳转打断了原有的取指流水线,不仅使CPU陷入等待而不能全速运行,而且取到的很多作废的指令数据,白白浪费了宝贵的总线带宽资源。可以说,程序跳转是CPU性能的主要影响因素之一。应对跳转影响的方法可以分为软件和硬件两个方面。在软件上着重减少程序跳转的次数,比如优化编译器,将软件程序中体量较小的子函数,合并入上一级主函数等。在硬件上,着重减少跳转产生的延迟开销,对跳转的预测技术就是CPU硬件架构上最主要的应对手段。所谓跳转预测,就是在取指时,通过当前指令地址,预测到跳转将要发生,并直接预测出跳转后的新目标地址。如果预测成功,则理想情况下程序跳转不会带来任何延迟开销;如果预测失败,则相当于带来一次额外的跳转开销,如图2所示。图2中CPU在t0时刻预测程序将发生跳转,新的指令地址为n,因此在t1时刻CPU直接向总线发出地址n。CPU在t1时刻预测程序还将发生跳转,新的指令地址为e,并在t2时刻直接发出地址e。经过td延迟后,总线依次流水化地返回指令0,指令n,指令e等。指令0在译码执行时发现确实需要跳转至地址n,即t0时刻的跳转预测正确,节省了d+j个cycle。指令n在译码执行时发现不需要跳转至地址e,即t1时刻的跳转预测失败,导致在t(d+j+2)时刻CPU重新发出地址n+1,并等待至t(2d+j+2)时刻才取得指令n+1,浪费了d+j个cycle。综上,只有在平均预测准确率较大时(应明显大于50%),跳转预测技术才能给CPU带来加速效果。目前业界将CPU的跳转预测技术,按照预测方式分为两大类:静态跳转预测和动态跳转预测。所谓静态跳转预测,就是在程序进入CPU实际运行前,就通过人工指定或按照某种规则,预测好每个跳转是否发生。当程序每次运行到该跳转指令时,就按照既定的预测结果,进行指令预取。所谓动态跳转预测,就是CPU在程序实际运行过程中,通过累加经验学习的方式,动态地预测跳转的发生概率,并预取高概率的跳转目标地址对应的指令。程序跳转,按照类型,可以分为无条件跳转和条件跳转两大类。无条件跳转是指程序会无条件地跳转到另一个确定的指令地址。在软件上通常对应着子函数的调用和退出。这种跳转其实是不需要进行预测的,但由于无条件跳转的目标地址需要等到跳转指令被取回,并通过译码和计算才能得到,因此也会产生额外延迟开销。条件跳转是指程序会根据某个变量的值,来判断是否跳转到另一个确定的指令地址。在软件上通常对应着if,case等分支判断语句,以及for,while等循环语句。下表总结了各种跳转及预测手段的对应效果等。静态跳转预测,通常采用固定的预测规则,例如最常用的就是:如果是向前跳转,则预测为跳;如果向后跳转则预测为不跳。其对于循环类等大概率发生的条件分支跳转,一般有较高的准确率。但对于以实时变量作为条件跳转判断依据的分支跳转,则往往没有什么明显效果。动态跳转预测,多采用历史计分表来进行历史累计学习,其对于循环类的分支跳转和有规律的条件分支跳转,和静态分支预测有接近的较好的效果。但无论是静态预测还是动态预测,都不能解决由于取指延迟和指令译码等带来的时间开销。因此都需要配合跳转地址查找表来减小时间开销。所谓跳转地址查找表,其基本结构与CPU中常用的缓存(Cache)基本一致,如图3所示。CPU中的取指单元,流水线化地向总线发出指令的目的地址,每条地址除了送至总线外,还送入跳转地址查找表中,与各表项中存储的源地址进行逐一比较。如果与某个源地址一致(即所谓的命中),该源地址对应的目的地址,就被路选出来,作为下一条取指地址。上述过程使得取指流水线无缝地跳转到了新的程序段继续运行,避免了跳转的延迟开销。在实际使用上,虽然跳转地址查找表大多是与跳转预测(动态或静态)配合使用,但在物理电路上二者往往是互相独立的,在逻辑关系上,二者也是先后关系。即先由跳转预测电路给出是否会发生跳转的预测,如果预测会发生跳转,再由跳转地址查找表电路给出跳转的目的地址。这个过程在实际使用上往往会耗时数个cycle,并不能达到理想的无缝无开销跳转的效果。
技术实现思路
有鉴于此,本专利技术旨在提出一种CPU中用于减少程序跳转开销的方法及电路,以有效减少跳转延时。本专利技术的核心思想是:通过在跳转地址查找表项中,加入历史计分值,将表项进行分值比较,从而将最常发生的跳转目的地址保留在查找表项中,从而有效减少跳转的延迟开销。为达到上述目的,本专利技术的技术方案是这样实现的:第一方面,本专利技术提供一种CPU中用于减少程序跳转开销的方法,包括如下步骤:1)在CPU的跳转地址查找表中为每个表项加入历史计分值,并将表项根据计分值进行分值排序;2)当跳转地址查找表发生命中时,则命中的对应表项其计分值增加,其余表项计分值减少;当发生命中的跳转在执行阶段确认跳转确实发生,则其对应的计分值再次增加,反之确认跳转并未发生,则其对应的计分值加倍减少;其中,当确认是一次跳转地址查找表中未记录的跳转确实发生后,判断跳转地址查找表中排序在最后的表项的计分值是否小于第一判断阈值,若小于则其内容被该新的确实发生的跳转的内容替换,其对应计分值也被重置为第一判断阈值;若不小于则跳转地址查找表的计分值均不变。进一步的,如果计分值发生上溢,则计分值保持上限值不变;如果计分值发生下溢,则计分值保持下限值不变。第二方面,本专利技术提供一种CPU中用于减少程序跳转开销的的电路,在CPU跳转地址查找表结构中,为每个表项加入一个独立的计分器,当跳转地址查找表发生命本文档来自技高网...
【技术保护点】
1.一种CPU中用于减少程序跳转开销的方法,其特征在于,包括如下步骤:/n1)在CPU的跳转地址查找表中为每个表项加入历史计分值,并将表项根据计分值进行分值排序;/n2)当跳转地址查找表发生命中时,则命中的对应表项其计分值增加,其余表项计分值减少;当发生命中的跳转在执行阶段确认跳转确实发生,则其对应的计分值再次增加,反之确认跳转并未发生,则其对应的计分值加倍减少;/n其中,当确认是一次跳转地址查找表中未记录的跳转确实发生后,判断跳转地址查找表中排序在最后的表项的计分值是否小于第一判断阈值,若小于则其内容被该新的确实发生的跳转的内容替换,其对应计分值也被重置为第一判断阈值;若不小于则跳转地址查找表的计分值均不变。/n
【技术特征摘要】
1.一种CPU中用于减少程序跳转开销的方法,其特征在于,包括如下步骤:
1)在CPU的跳转地址查找表中为每个表项加入历史计分值,并将表项根据计分值进行分值排序;
2)当跳转地址查找表发生命中时,则命中的对应表项其计分值增加,其余表项计分值减少;当发生命中的跳转在执行阶段确认跳转确实发生,则其对应的计分值再次增加,反之确认跳转并未发生,则其对应的计分值加倍减少;
其中,当确认是一次跳转地址查找表中未记录的跳转确实发生后,判断跳转地址查找表中排序在最后的表项的计分值是否小于第一判断阈值,若小于则其内容被该新的确实发生的跳转的内容替换,其对应计分值也被重置为第一判断阈值;若不小于则跳转地址查找表的计分值均不变。
2.根据权利要求1所述的一种CPU中用于减少程序跳转开销的方法,其特征在于:如果计分值发生上溢,则计分值保持上限值不变;如果计分值发生下溢,则计分值保持下限值不变。
3.一种...
【专利技术属性】
技术研发人员:王粟,肖佐楠,郑茳,
申请(专利权)人:天津国芯科技有限公司,
类型:发明
国别省市:天津;12
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。