分离式指令cache结构的制作方法

文档序号:20837749发布日期:2020-05-22 17:05阅读:712来源:国知局
分离式指令cache结构的制作方法

本发明涉及指令cache技术领域,具体为分离式指令cache结构。



背景技术:

指令cache是cpu中用于缓存指令的部件,cpu在运行时根据pc从指令cache中取得地址;之后会对这些地址进行预译码,并根据预译码的结果进行分支预测;分支预测会给出新的pc,使用新的pc再次访问指令cache获得新的指令。以上过程周而复始,使得cpu能够在指令cache命中时持续地获得指令供给。

如图1中所示,从获得pc开始到对应的指令到达分支预测器进行预测获得预测的取指pc需要经过多个步骤,这些步骤难以在一个时钟周期内完成,因此普遍被划分到多级流水线当中,这就导致指令到达分支预测器时后面还有多级流水线需要填充。由于进行分支预测前无法预测指令是否发生跳转以及跳转的目标地址,因此只能假设指令不发生跳转来按照pc自然增加的方向继续取指。当分支预测器预测指令发生跳转时,要改变取指的方向,此时已经填充到取指流水线中的指令将被无效化,新的指令要重新经过图1中的流程,这会导致后面的流水线级有几个时钟周期没有指令经过。在现代cpu中,从获得pc到进行分支预测往往需要经过3~4个周期,如果分支指令被预测为跳转则至少会有1~2个周期没有有效指令进入后面的流水线中。在实际的程序运行过程中,分支指令占到很高的比例,一般认为在定点程序的运行中有25%的指令是分支指令,现代的超标量cpu一般都能做到每周期执行4条或更多的指令,这就表示平均每周期都遇到一条分支指令。在这种情况下取指流水线会因为分支预测为跳转而被频繁排空,这造成处理器的取指很不连续,对处理器的性能造成很大影响。

为了减小上述情况对cpu性能的影响,有些cpu在指令cache之外又增加了一个容量更小、结构更简单的0级指令cache(传统的指令cache被视为1级cache),0级指令cache有更短的访问时间,当它命中时可以减少从获得pc到进行分支预测的延迟。

0级指令cache为了相对1级指令cache减小访问延迟必须减小容量和设计复杂度,比如减少组相联度,使用路预测直接提前预测命中的路并只读取该路以减小读出的数据宽度等。这些方法毫无疑问使得0级指令cache的命中率比1级指令cache的命中率低,而采用0级指令cache的cpu的1级指令cache的访问延迟往往会加长,因此如果0级指令cache的命中率低则对性能提高有限甚至在某些场景下会影响性能。此外,实现0级指令cache需要占用很大的芯片面积。



技术实现要素:

本发明的目的在于提供分离式指令cache结构,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:分离式指令cache结构,将指令cache拆分为两部分,一部分称为bic,另一部分称为ric。

优选的,当取指的指令为分支指令时,所述bic内保存指令中可能与分支预测相关的信息,所述ric指令则保存指令中的其他部分,在分支预测时只获取bic指令内的数据,然后将bic与ric中的数据拼装为完整的指令进行译码。

优选的,当取指的指令为非分支指令时,指令内的内容也会被拆成两部分分别保存在bic和ric内,在取指的过程中bic的分支类型指示此指令不是分支指令,分支预测器不会对它进行预测。在和ric的内容进行拼接后这些指令会直接按照普通的方式进行译码以及后继操作。

优选的,所述bic内具体保存的信息为在指令加载到指令cache之前进行预译码的结果,所述ric内保存的是取指指令中的原始操作码和寄存器地址。

优选的,所述预译码的结果包括:

(1)指令是否为分支指令;

(2)如果是分支指令,分支指令的类型,以及指示分支指令的对应预测方法;

(3)分支目标地址的偏移量。

优选的,所述分支指令的类型包括:非分支、条件分支、间接跳转、函数调用、函数返回和直接跳转。

优选的,所述分支目标地址的偏移量来自于指令内的立即数或是立即数与指令pc的和。

与现有技术相比,本发明的有益效果是:

(1)由于bic只保存指令的一部分内容,因此bic的容量和读写宽度都比传统的指令cache小的多,可以有更低的访问延迟,有利于减少取指流水线的级数;

(2)bic的组织形式与传统的指令cache完全一致,它们有相同的组数和相联度,采用相同的命中判断逻辑和替换策略,因此它的命中率和传统的1级指令cache完全一样,高于0级指令cache;

(3)ric内的数据由于并不会立即使用,因此可以使用bic指令的命中信息只读出命中的路,这样可以节省面积和功耗;

(4)bic和ric的内容合起来是传统的1级指令cache的内容,由于ric的面积优化,分离式指令cache的总面积甚至可能小于传统的1级指令cache。与传统的0级+1级的两级指令cache方案对比,本发明可达到类似的时序优化效果,但是避免了0级指令cache命中率低的问题,同时在面积和功耗上大大低于两级指令cache的方案。

附图说明

图1为传统的取指流程图。

图2为分离式指令cache结构图。

图3为常见的分支指令编码格式图。

图4为常见的分支指令编码格式图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图2、图3和图4,本发明提供一种技术方案:分离式指令cache结构,将指令cache拆分为两部分,一部分称为bic,另一部分称为ric,当取指的指令为分支指令时,在把指令储存在bic和ric之前进行预译码,bic内保存指令中可能与分支预测相关的信息,ric则保存指令中的其他部分,在分支预测时只获取bic指令内的数据,然后将bic与ric中的数据拼装为完整的指令进行译码,由于bic中只保存指令的部分信息,因此可以比普通的1级指令cache容量更小,可以更快速,从而起到缩短取指流水线访问延迟的作用。

bic内具体保存的信息为在指令加载到指令cache之前进行预译码的结果,预译码的结果包括:

(1)指令是否为分支指令,分支指令的类型包括:非分支、条件分支、间接跳转、函数调用、函数返回和直接跳转;

(2)如果是分支指令,分支指令的类型,以及指示分支指令的对应预测方法;

(3)分支目标地址的偏移量,分支目标地址的偏移量来自于指令内的立即数或是立即数与指令pc的和。

常见的分支指令的编码如图3和图4中所示,主要包含指令的操作码、寄存器地址和立即数。从指令的操作码可以得出具体的指令操作,寄存器地址表示从哪个寄存器获得源操作数或者结果写回到哪个寄存器,立即数表示分支目标地址相对于当前pc的偏移,在bic中保存的就是这些预译码的结果,使用这些结果就可以进行分支预测,而ric中保存的是指令的原始操作码和寄存器地址,如图4所示,bic中的偏移量直接来自于图3中指令的低16位,而3位的分支类型是来自于对6位操作码的预译码结果,用于指导分支预测器的工作,因此只记录了指令是不是分支指令以及是何种分支指令,而其他的译码信息在进行分支预测之前并不需要,所以不保存在bic当中,ric内保存的是取指指令中的原始操作码和寄存器地址,这些内容在指令译码时才会被使用,因此会在译码前和ric的内容合并。

当取指的指令为非分支指令时,指令内的内容也会被拆成两部分分别保存在bic和ric内,在取指的过程中bic的分支类型指示此指令不是分支指令,分支预测器不会对它进行预测。在和ric的内容进行拼接后这些指令会直接按照普通的方式进行译码以及后继操作。

ric指令的内容在很晚的时候才会真正需要,因此ric的读出速度不是很关键,这可以使得ric根据bic命中信息直接读取命中的路,而不需要像传统的指令cache那样同时读取所有的路,再根据命中情况选择输出的路。只读取一路使得ric的读写宽度大大降低,由此带来面积和功耗的节省。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1