分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质的制作方法

文档序号:6348040阅读:210来源:国知局
专利名称:分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质的制作方法
技术领域
本发明涉及在信息处理装置执行的指令的分支预测。
背景技术
处理器指令中有时包含向指定的地址跳转的分支指令。现在的处理器中,指令通 过管线构造执行。在管线执行指令时,在某指令的执行结束之前,先行取出位于该之前的地址的指 令。在此,有时在执行分支指令时变更程序的流程,且不需要所取出的指令。因此,不需要 所取出的指令,需要重新取出分支目标的指令的地址。该指令取出的更正成为引起进入管线的中途的指令处理的废弃(将其称作管线 危害)而使处理器的执行性能降低的一要因。因此,对于处理器,预测分支指令的分支目标是重要的。分支指令的一种中有条件分支指令。条件分支指令是指通过此时的运算结果决定 是否产生分支的分支指令。在未产生分支的情况下,执行后续的指令,在产生分支的情况 下,以固定的分支目标的地址执行所指定的指令。在该条件分支指令中,有从过去的分支结果推测是否发生分支并决定分支目标的 技术。即,通过过去的分支结果取得是否发生分支的统计,将是否发生分支的概率高的一方 预测为分支目标。由此,可以提高条件分支指令的分支预测的概率。但是,分支指令中,作为更复杂的分支,有被称作间接分支的分支。间接分支是指 向在某寄存器设定的值的跳转指令、及程序计数器的地址代入引起的跳转等、跳转目标不 一定的分支。在间接分支中,不仅条件分支引起的分支与否不一定,而且跳转目标也不一定,因 此,单纯的分支预测功能中,不能进行分支目标的预测。作为预测间接分支的一个现有技术,有返回栈。函数执行后的返回目标通过函数 的调用方改变,因此,将调用方的地址记录于存储器上的栈等中,在从函数恢复(返回)时, 向该地址跳转。在函数调用时将返回目标地址保存于专用的返回栈,在取出来自函数的返 回指令时,以取得存储器上的返回方地址的跳转的处理为开头,为从返回栈取得返回地址 并在下次取出,而作为地址的预测使用。另外,作为相对于间接分支的分支预测的一个技术,有将有助于间接分支的结果 的键信息在程序中通过程序使用专用的隐式操作指令指定键信息,预测分支目标(参照专 利文献1)。先行技术文献专利文献1 日本特表2004-533695号公报发明的概要发明要解决的课题
但是,在上述专利文献1所记载的技术中,需要使用专用的隐式操作指令对处理 器通知键信息,存在在成为预测对象的程序内编入隐式操作指令的麻烦。

发明内容
本发明用于减轻上述麻烦,其目的在于,提供一种分支预测装置,不在程序中编入 所述的隐式操作指令那样的专用的处理,而对任意的程序预测包含间接分支的程序的分 支。为解决上述课题,本发明提供一种分支预测装置,其特征在于,具备指令执行部, 执行指令;函数调用通知部,通知所述指令执行部执行函数调用指令;调用栈,在所述函数 调用通知部通知执行函数调用指令时,存储该函数调用指令的中至少一个自变量;分支指 令通知部,通知所述指令执行部执行所述函数调用指令调用的函数中包含的分支指令;分 支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表 示分支目标的地址的分支结果建立了对应的分支结果条目;分支预测部,在所述分支指令 通知部通知了执行分支指令的情况下,检索所述分支结果存储部是否记录有所执行的该分 支指令的地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该 分支结果条目的分支结果设为该分支指令进行的分支的预测结果;指令取出部,基于所述 分支预测部预测的预测结果取出指令;以及分支结果记录部,使完成分支指令的执行后执 行的分支指令所处的地址、表示通过该分支指令的执行而分支的分支目标的地址的分支结 果以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所 述分支结果存储部。在此,函数是指计算机程序中的所谓的子程序。根据上述那样的结构,分支预测装置在执行函数的调用时,调用栈取得该函数的 自变量,在执行分支指令时,可使用调用栈保持的自变量和过去的分支结果预测分支。由 此,用户即使不在程序中编入所述专利文献1中的隐式操作指令那样的特殊的指令,分支 预测装置也能够作为成为用于分支预测的键的信息自动取得该分支指令所属的函数的自 变量,实现分支预测,可以以任意的程序实现间接分支的分支预测。


图1是表示实施方式的分支预测装置的功能结构的功能框图;图2是表示自变量向调用栈113的传递方法的概要图;图3是表示存储于分支结果缓冲器的分支结果信息的结构例的数据概念图;图4是表示执行程序并将自变量存储于调用栈的样态的概要图;图5是表示分支预测部117执行的分支预测时的检索方法的概要图;图6是表示信息处理装置100的分支预测的动作的流程图;图7是表示高级语言程序、该高级语言程序的汇编代码、存储于调用栈的自变量 的关系的关系图;图8是表示编译器119的编译中的动作的流程图;图9是表示执行编译器119编译的指令时的指令执行部110的动作的流程图;图10是表示函数的自变量、分支指令的自变量、存储于调用栈的自变量的关系的
6关系图;图11是表示变形例的信息处理装置300的其它结构例的功能框图;图12是表示变形例的信息处理装置300的自变量向调用栈的传递方法的具体例 的图;图13是表示变形例的信息处理装置300的自变量向调用栈的传递方法的其它具 体例的图;图14是表示执行图8所示的程序的分支指令时的分支预测部的检索方法的概要 图;图15是表示自变量向调用栈的传递方法的其它例的图;图16是表示图15所示的调用栈的自变量的传递方法的具体例的图;图17是表示调用栈的其它结构例的图;符号说明100、300信息处理装置110、122 指令执行部111函数调用通知部112 函数返回通知部113、123 调用栈114分支指令通知部115分支结果记录部116分支结果缓冲器117分支预测部118 指令取出部120 寄存器组121自变量序号通知部200存储装置1000、1100 分支预测机构
具体实施例方式<实施方式>参照附图对包含本发明的分支预测装置的一个实施方式的分支预测机构1000的 信息处理装置100进行说明。< 结构 >图1是表示信息处理装置100的功能结构的功能框图。如图1所示,信息处理装置 100的结构包括指令执行部110、函数调用通知部111、函数返回通知部112、调用栈113、 分支指令通知部114、分支结果记录部115、分类结果缓冲器116、分支预测部117、指令取出 部118、编译器119。信息处理装置100与存储装置200连接,是依次读出并执行存储于存储装置200 的指令的处理器。指令执行部110具有将编译器119以执行形式转换的指令串从存储装置200取出并依次执行的功能。函数调用通知部111具有在指令执行部110进行函数调用时对其进行检测,将该 消息通知给调用栈113的功能。在此所说的函数是指所谓的子程序的调用,即用于执行1 以上的指令的程序的调用。高级语言中的的函数通过编译器119编译成处理器的指令串并 执行。当编译器119在函数的调用部分的编译中使用特定的指令的情况下函数调用通知部 111检测该特定的指令的执行,来检测执行函数调用。特定的指令例如是指在进行跳转的同 时将该跳转指令的下一地址作为返回地址保持于被称作返回寄存器的特定的寄存器的指 令等。如何编译函数根据信息处理装置100所使用的编译的规则决定。假设函数调用通知 部111根据该规则编译指令串,并存储特定的指令是哪一指令,通过检测该预定的特定的 指令的执行,通知执行函数的调用。函数返回通知部112具有监视指令执行部110是否结束即在返回的情况下将该消 息通知给调用栈113的功能。与函数的调用相同,即使函数返回,编译器119也可以使用特 定的指令进行编译,因此,通过检测编译器119进行的该特定的指令的执行,函数返回通知 部112检测函数的返回。调用栈113具有在通知了从函数调用通知部111有函数的调用的情况下,取得指 令执行部110的特定的寄存器中存储的值作为调用的函数的自变量且将其进栈、即存储的 功能。另外,还具有在从函数返回通知部112通知了函数结束即返回时,将存储于最后的自 变量输出、即退栈的功能。另外,调用栈113为所谓的FILCKFirsthLastOut/先入后出) 型的存储器,在本说明书中,将在使从调用栈113保持的自变量退栈时输出的值记载为调 用栈113的开头值。通过进行上述的进栈和退栈,成为在调用栈113的开头值必须保持现 在执行的函数的自变量的结构。图2是表示调用栈113中的处理、即自变量的取得方法的详细的图。对于自变量向函数的过渡方法也被预先决定,函数的自变量通常按高级语言程序 中记载的顺序从对指令执行部110保持的寄存器组120的各寄存器分配的序号小的部分依 次存储。即,以寄存器0存储函数的第一自变量、寄存器1存储函数的第二自变量、寄存器2 存储函数的第三自变量、…这样的方式对各寄存器存储自变量。这样,存储于寄存器的自 变量中,在本实施方式中如图2所示,调用栈113取得存储于寄存器0的自变量并存储。另外,图4表示自变量向调用栈113的存储的顺序之一具体例。程序400的函数funcA接收自变量a0、al、a2。该自变量a0被存储于寄存器0中, 向调用栈113进栈。在函数funcA内,程序400调用函数funcB。函数fimcB接收自变量 b0、bl、l32。自变量b0存储于寄存器0,且向调用栈113进栈。在函数funcB内,程序400 调用函数funcC。函数fimcC接收自变量c0、cl、c2。自变量cO存储于寄存器0,向调用栈 113进栈。图4的程序400的右横表示此时的调用栈113所保持的自变量的信息,观察图4 表明,最后调出的函数fimcC的第一自变量即cO成为开头值。另外,图4中,调用栈113的 上侧成为开头值。返回图1,分支指令通知部114具有判定指令执行部110所执行的指令是否为分支 指令,在为肯定的的判定的情况下,将该消息通知给分支结果记录部115和分支预测部117 的功能。分支结果记录部115在从分支指令通知部114通知分支指令的执行时,取得指令执行部110所执行的该分支指令的地址,并且,执行指令执行部110中的该分支指令的结果 是获得分支的分支目标的地址。另外,分支结果记录部115也取得执行分支指令时的调用 栈113的开头值。分支结果记录部115还具有使所取得的分支指令的地址、在分支的时刻 的调用栈113的开头值和分支指令的分支目标的地址相对应,将其记录于分支结果缓冲器 116的功能。分支结果缓冲器116为存储有使分支指令所处的地址、执行该分支指令时的调用 栈的开头值和分支指令的分支目标的地址相对应的分支结果条目的存储器。图3表示分支结果缓冲器116所存储的分支结果信息的数据结构例的数据概念 图。分支结果信息为将使分支指令地址301、调用栈的开头值302和分支目标303相对 应的分支结果条目综合的信息。分支指令地址301为表示分支指令所处的地址的信息。调用栈的开头值302为表示执行所对应的分支指令时的、存储于调用栈113的自
变量的信息。分支目标303为实际执行分支指令并分支的分支目标的地址的信息。通过将该分支结果信息存储于分支结果缓冲器116,分支预测部117可以执行分 支的预测。返回图1,分支预测部117在接受来自分支指令通知部114的通知时,取得与该通 知一同传递的分支指令的地址、和此时的调用栈113的开头值。分支预测部117检索与所 取得的分支指令的地址、和调用栈113的开头值这两方一致的分支结果条目是否处于分支 结果缓冲器116。而且,分支预测部117具有在有一致的分支结果条目的情况下,将该分支 结果条目的分支目标作为分支指令的预测目标通知给指令取出部118的功能。图5是表示该分支预测部117检索分支结果缓冲器时的検索方法的概要图。如图5所示,分支预测部117检索分支指令所处的地址和此时从调用栈113取得 的自变量相对应的分支结果条目是否处于分支结果缓冲器116。即,分支预测部117取得所 执行的分支指令的地址,检索是否有与所取得的分支指令的地址相一致的地址。其次,在有与分支指令的地址相一致的分支结果条目的情况下,接着检索该分支 结果条目中从调用栈113取得的自变量是否有与调用栈的开头值302相一致的自变量。这样,将与两者相一致的分支结果条目的分支目标作为分支指令的分支目标进行 预测。再次返回图1,指令取出部118具有从存储装置200取出指令的功能。指令取出 部118具有从分支预测部117通知下次执行的指令的地址的情况下,从所通知的地址取出 指令的功能。以上为信息处理装置100的各功能部的说明。〈动作〉图6是表示信息处理装置100的分支预测的动作的流程图。基于本流程图说明信 息处理装置100的分支预测的动作。如图6所示,信息处理装置100的分支指令通知部114对执行分支指令进行检测, 并将该消息通知给分支预测部117(步骤S601)。
分支预测部117在从分支指令通知部114通知执行分支指令后,取得此时的调用 栈113的开头值。另外,分支预测部117从分支指令通知部114也取得执行的分支指令的 地址(步骤S602)。而且,检索与所取得的分支指令的地址、和调用栈113的开头值相一致的分支结 果条目是否被存储于分支结果缓冲器116(步骤S603)。分支预测部117在分支结果缓冲器116中存储了分支结果条目的情况下(步骤 S603中“是”,将与执行的分支指令的地址、和调用栈113的开头值相一致的分支结果条目 的分支目标303作为该分支指令的分支目标进行预测(步骤S604)。指令取出部118将从分支预测部117通知的地址的指令从存储装置200调出并取 出到指令执行部110 (步骤S605)。在分支结果缓冲器116中没有存储分支结果条目的情况下(步骤S603中“否”), 分支预测部117向指令取出部118输出表示未预测的信息。于是,指令取出部118取出该 分支指令的下一地址的指令。而且,实际上执行分支指令时(步骤S607),分支结果记录部115将使该分支指令 的地址、执行该分支指令的时刻的调用栈113的开头值和执行分支指令的结果为分支的分 支目标的地址相对应的分支结果条目记录于分支结果缓冲器116(步骤S608)。以上是分支预测部117的分支预测以及执行分支指令时的信息处理装置100的动作。图7是表示高级语言程序、编译的处理器指令串、以及通过执行该指令串而存储 于调用栈113的自变量的图。图7所示的高级语言程序701的函数Interpreter是以模拟指令inst为自变量 的解释程序语言的执行函数。Java (注册商标)Script等在将文本文件的程序进行解释并 编译成模拟指令后,通过解释程序对其模拟指令进行处理。典型的是,安装解释程序的函数 如图7所示,通过switch case文实现对应于各模拟语言的处理。图7所示的处理器指令串702是通过模拟的处理器指令串表示函数interpreter 的指令串。在此,在以mv指令将自变量inst存储于寄存器r0后,以bl指令进行向函数 interpreter的开头的跳转(函数调用)。在函数interpreter内,首先,作为下位函数,函数func以自变量为a被调出。之后,通过tst指令判定寄存器rO、即函数interpreter的自变量是否为A。在等 同于A的情况下,在寄存器rl存储数值0x01000。同样,如果rO为B,则在寄存器rl存储 0x2000。通过位于地址0x0100的mv指令在程序计数器(pc)中代入寄存器rl的值,产生 分支。即,若函数interpreter的自变量inst为A,则成为向0x1000的分支,若为B则成为 向0x2000的分支。图7中右段表示执行处理器指令串702的过程中的调用栈113的状态。在调出函数interpreter时,自变量inst向调用栈113进栈。另外,在调出之后 调出的下位函数func时,下位函数func的自变量a向调用栈113进栈。在该时刻,自变量 a成为调用栈的开头值。另外,在函数func返回时,将自变量a退栈,自变量inst再次成为调用栈113的 开头值。在地址0x0100发生分支时,在自变量inst为A时,在分支结果缓冲器116中生成分支目标地址为0x1000的分支结果条目。在地址0x0100发生分支时,在自变量inst为B 时,在分支结果缓冲器116中生成分支目标地址为0x2000的分支结果条目。在作好该分支结果条目之后,以自变量A及B执行函数interpreter时,在执行位 于地址0x0100的分支指令时,作为预测值得到各自的分支目标地址。图8是表示编译器119的编译中的动作的流程图。图8中特别表示调出函数时的 函数的编译的动作。另外,再次,仅对本实施方式的发明的部分的动作进行了记载,对于其 它动作的详细以现有的编译为基准并省略。编译器119在编译函数时,在该函数内判定特定的自变量是否决定分支目标(步 骤 S801)。该判定按照以下的顺序。首先,对函数进行解析,检索函数内是否有分支指令。而 且,在有分支指令的情况下,判定该分支指令的分支的条件中使用的数据是否包含于函数 的自变量。由此,判定函数的自变量是否决定分支目标。在调用函数时,在判定为该函数的自变量中特定的自变量决定分支目标的情况下 (步骤S801中“是”),生成将决定分支目标的自变量存储于调用栈113取得值的寄存器中 的代码(步骤S802)。即,生成将函数的自变量中包含的特定的自变量存储于寄存器0中的 代码。例如,在决定分支目标的自变量为函数的第一自变量的情况下,生成将该第一自变量 存储于寄存器0的代码,在决定分支目标的自变量为函数的第三自变量的情况下,生成将 该第三自变量存储于寄存器0的代码。然后,编译器119生成对调用栈113指定取得哪一寄存器的自变量的代码(步骤 S803)。在此,编译器119在调用栈113生成取得寄存器0的值的代码。而且,编译器119将函数内的各指令如通常那样进行编译而结束。在特定的自变量未决定分支目标的情况下(步骤S801中“否”),编译器119如通 常那样对函数的各指令进行编译而结束。图9是表示在根据图8所示的动作进行编译的代码串中目标文件的链路动作的流 程图。该动作是表示执行指令时值向寄存器的存储的方法的动作,除此之外的动作以现有 的指令的执行方法为基准,在此省略。如图9所示,指令执行部110判定是否保持有指定调用目标的函数传递自变量的 寄存器的信息(步骤S901)。在保持有指定传递自变量的寄存器的信息的情况下,(步骤S901中“是”),编译器 119根据该信息修正向函数调用部分的寄存器存储自变量的代码(步骤S902)。即,在有指 定将哪一自变量存储于哪一寄存器的代码的情况下,将所指定的自变量修正为存储于寄存 器0的代码。在未指定的情况下,按记载于高级语言程序的顺序将函数的自变量按寄存器 序号由小到大的顺序存储。判定是否结束所有的函数调用的链路(步骤S903),在结束的情况下(步骤 S903),结束目标文件的链路处理,在未结束的情况下,返回步骤S901。使用图10说明根据该编译方法执行函数调用,且执行分支指令的情况的例子。 图10表示调用函数并在该函数内执行分支指令的情况的一具体例。在此,作为分支指令 之一例表示 switch case 文。switch case 文例如在 Ci吾言、C++、PHP(Hypertext ft·印rocessor。另夕卜,PHP为Personal Home Pagetools的简称,但PHP的本来意思为HypertextPreprocessor.)等语言中使用。为使本实施方式的信息处理装置100的分支预 测部成功预测,需要将对分支有影响的函数的自变量存储于调用栈113。图10表示用于此 的自变量对寄存器的存储方法。在图10(a)的程序1001中,对于对switch文有影响的自变量,由于switch文的 自变量为a0,所以可知与分支相关的自变量也为aO。因此,在进行函数fimcA的调用时,需 要对调用栈113传递自变量aO。因此,采用将fimcA的第一自变量即a0存储于寄存器0的 结构。该情况下的编译器119生成的代码例如通过将第一自变量存储于寄存器0的指令、 例如“mv r0(a0)”等实现。如上所述,传递给调用栈113的自变量为存储于寄存器0的值, 由此,将与分支相关的自变量存储于调用栈113。另一方面,在图10(b)的程序1002中,与switch文相关联的自变量为bl。该自变 量bl成为函数fimcB的第二自变量。因此,在图10(b)的情况下,funcB的第二自变量bl 成为被存储于寄存器0的结构。由此,在调用栈113中存储与分支相关联的自变量。存储 该第二自变量的结构通过在编译器119进行编译时指定自变量向寄存器存储时的方法来 实现。〈变形例〉对上述实施方式中所示的对信息处理装置100进行了变形的其它结构例的信息 处理装置300进行说明。在本变形例中,仅对与上述实施方式所示的信息处理装置100的 差异进行说明,对于其它与信息处理装置100共通的内容省略说明。图11是表示信息处理装置300的功能结构的功能框图。信息处理装置300与信息处理装置100不同,具备进行一部分与指令执行部110 不同的动作的指令执行部122,另外,具备信息处理装置100不具备的自变量序号通知部 121。对于其它结构,信息处理装置300采用与信息处理装置100相同的结构。指令执行部122具有执行通过指令取出部118从存储装置200取出的指令,进而 解释指定对分支造成影响的函数的自变量的指令,并将其通知给自变量序号通知部21的 功能。指令自变量的指令为在编译时编译器解析程序且自动地进行附加的指令。自变量序号通知部121具有从指令执行部122取得被指定的自变量的序号,将所 取得的自变量序号通知给调用栈123的功能。调用栈123具有从自变量序号通知部121接受通知,将所指定的自变量进栈的功 能。调用栈123与调用栈113相同,接受来自函数调用通知部111的通知,将其函数的自变 量进栈,接受来自函数返回通知部112的通知,将其函数的自变量退栈。即,在调用栈123 的开头值保持现在执行中的函数的自变量。由于具备该结构,从而信息处理装置100的分支预测机构1100能够将对分支造成 影响的自变量更可靠地存储到调用栈。图12表示调用栈123中的保存函数的自变量的例子。图12表示使用自变量序号 通知部121取得函数的自变量的顺序。图12(a)中,成为分支的对switch case文有影 响的自变量为aO。图12(a)所示的指令arg通知对分支有影响的自变量。图12(a)的指令 arg的操作数0表示存储有对分支有影响的自变量的寄存器组120的寄存器序号。因此,在 图12(a)的情况下,调用栈123对通过arg指令指定的寄存器0的值进栈。在图12(b)中,对分支有影响的自变量为bl。图12(b)的指令arg的操作数为1。由此,可知对分支有影响的寄存器组120的寄存器序号为寄存器1,调用栈123在函数调用 时将由arg指令指定的寄存器1的值进栈。为实现该结构,编译器119在编译时需要生成该arg指令。在上述实施方式中,编 译器119生成指定将哪一自变量存储于寄存器0的代码(指定以mv指令存储于寄存器的 值),与之相对,在本变形例中,生成调用栈指定哪一寄存器的值进栈的代码。〈总结〉如上述实施方式、及其变形例所示,信息处理装置100具备在进行函数调用时取 得其自变量的调用栈。而且,在执行分支指令的段,根据存储于该调用栈的值的开头值、和 所执行的分支指令所处的地址检索过去的分支结果,预测分支目标。另外,在实际执行分支 指令的情况下,通过存储使该分支指令所处的地址、在该时刻的调用栈的开头值和分支目 标的地址相对应的分支结果条目,可提高以后执行的分支指令的分支目标的预测的概率。 在函数调用时,由于具备取得该自变量的调用栈,从而即使不装入指定现有技术的隐式操 作指令之类的分支预测的键信息的指令,也能够实现间接分支的分支预测。即,在任意的程 序中,可进行包含于该程序内的分支指令的分支目标的预测。〈补充〉在实施方式中,对本发明的实施方法进行了说明,当然,本发明的实施方式不限于 此。下面,对上述实施方式以外的作为本发明含有的各种变形例进行说明。(1)在上述实施方式中,函数调用通知部111为检测指令执行部110所执行的指令 通过编译器119以特定的指令进行编译并通知执行函数的调用的结构。但是,检测函数的 调用的方法不限于此,也可以对所执行的指令进行解析,以是否有与预定的特定的指令文 相一致的指令进行检测。或者,也可以生成编译器119通知函数调用的专用的指令,通过向 函数调用通知部111输出该指令,检测函数调用通知部111进行函数调用的执行。同样,函数返回通知部112也可以如上述实施方式所示,通过检测编译器119执行 特定的指令,不检测函数的返回的执行而通过上述的方法、例如接受来自编译器的函数返 回的执行的通知等的方法检测函数的返回。(2)在上述实施方式中,分支预测部117表示使用调用栈113的开头值进行预测的 方法,但在执行分支指令时,如果将该分支指令在哪一函数内执行、或者与该函数相对应的 自变量为哪一个相对应地存储,则也可以为不是调用栈113的开头值,而参照必要的自变 量的结构。即,调用栈113在取得自变量时,与表示此时调用的函数的信息相对应的进行存 储,分支预测部117也可以为在通知执行分支指令时,接受包含该分支指令的函数的信息, 从调用栈113取得对应于通过该函数的信息表示的函数的自变量的结构。(3)在上述实施方式中,对分支预测部117有多个分支指令的地址和调用栈113的 开头值一致的分支结果条目的情况进行了说明,在此进行该说明。分支结果条目在上述的内容中还可以对应用于求取是否分支的频次的信息。艮口, 各分支结果条目还可以对应分支计数值。该分支计数值在其分支结果条目所示的分支指令 分支为实际上由该分支结果条目所示的分支目标的情况下+1,在没有分支的情况下-1。而且,分支预测部117检索的结果是,在有多个该分支结果条目的情况下,也可以 将分支计数值最高的分支结果条目的分支目标作为所执行的分支指令的分支目标对指令 取出部118通知地址。
由此,能够提高分支预测的概率。另外,在上述的分支计数值中,该分支计数值只要用于表示分支结果条目的分支 的概率即可,将上述的未分支的分支结果条目的分支计数器-1的结构也可以不设置。另外,进行加法的值也可以不为1,也可以为预定的值。(4)在上述实施方式中,表示了对分支有影响的自变量为一个的情况的具体例,但 有时有多个对分支有影响的自变量。在此,参照图13对该情况下的信息处理装置300的动作进行说明。图13表示在这种情况下以指定自变量的指令依次指定对分支有影响的自变量的 例。如图13的switch文所示,该自变量在各分支中,自变量al、a0对分支有影响。因 此,如处理器指令串的arg指令所示,高级语言程序的函数调用时的自变量的顺序(a0、al、 a2)中的aO和al的顺序作为相反的指令串被编译。而且,调用栈123按该顺序将自变量进栈。即,先将aO进栈,然后将al进栈。由 此,在执行分支指令时,可以将与各分支指令相关联的自变量作为分支预测的键信息使用。 另外,分支的预测、向分支结果缓冲器的分支结果是,向条目的存储利用从调用栈退栈的自变量。另外,图13(a)所示的结构也可以通过图13(b)所示的结构实现。即,如图13(b) 所示,调用栈123为可保持多个自变量的结构。图13(b)表示调用栈123可以一阶段保持 多个自变量的情况。分支预测部117在进行分支预测时,按顺序使用在调用栈123的相同 阶段存储的值。关于将哪一自变量存储于哪一寄存器,如上述实施方式、变形例所示可通过编译 器119生成指定存储于寄存器中的变量的代码来实现。(5)在上述实施方式中,表示间接分支的例子,但在执行固定了分支目标的分支指 令的条件时,也可以进行预测。图14表示固定了分支目标时的向分支结果缓冲器116进行记录的例子。在图14 的程序例中,以tst指令判断寄存器rO的值是否等同于a,且是否基于其结果执行条件分支 指令bleq。执行bleq指令时发生向由rl所示的地址的分支。存储于分支结果缓冲器116的分支结果信息使分支指令所处的分支指令地址 301、调用栈113的开头值302、是否发生分支的分支结果相对应。分支预测部117在执行条件分支指令时,检索分支结果缓冲器116中是否有与该 条件分支指令所处的地址、和此时的调用栈113的开头值相一致的分支结果条目,在有的 情况下,在表示该分支结果为条目的分支304进行了分支的情况下,将固定的分支目标的 地址通知给指令取出部118,在没有分支的情况下,将条件分支指令的下一地址通知给指令 取出部118。根据该结构,不仅可进行间接分支,而且还可以进行条件分支的分支预测。 (6)在上述实施方式中,表示指令执行部110具备用于存储自变量的寄存器组120 的结构。 在此,对指令执行部110具备寄存器组120的结构以外的结构进行说明。即,使用 图15说明将指令执行部110设为将自变量存储于存储装置200的结构的情况。
14
该情况下,指令执行部110具备表示将自变量存储于何处的栈指针寄存器1501。 而且,存储装置200在由栈指针寄存器1501所示的栈1502中存储函数的自变量。调用栈 113在通过函数调用通知部112通知了函数的调用的情况下,从指令执行部110取得栈指针 寄存器1501的值,将由存储装置200的该栈指针寄存器1501所示的栈1502中存储的值作 为自变量取得并存储。即使为这样的结构,调用栈113也能够将与分支指令相关联的函数调用时的自变
量进栈。图16表示使用图15所示的方法进行自变量的取得的情况的具体例。如图16(a)所示,在调用程序501中的funcA时,以aO到达栈1602的开头的方式 存储该函数a0、al、a2。此时,在栈指针寄存器1501中存储栈1602的开头地址。而且,在执行分支指令(图16(a)的switch文)的定时,调用栈113中,在调用栈 113中存储在由栈指针寄存器1501所示的地址即栈1602的开头保持的aO。另外,如图16(b)所示,在调用程序502中的fimcB时,以与分支指令相关联的bl 到达栈1602的开头的方式存储该函数bO、bl、1^2。此时,在栈指针寄存器1501中存储栈 1602的开头地址。而且,在执行分支指令(图16(b)的switch文)的定时,在调用栈113中,在调用 栈113存储在由栈指针寄存器1501所示的地址即栈1602的开头保持的bl。(7)在上述实施方式中,表示在调用栈113中存储近存储于寄存器0的值的结构。在此,表示作为本发明的思想包含的其以外的实施方式。图17(a)表示的是取得大量调用栈113的容量,不仅存储存储于寄存器0的自变 量,而且还存储函数调用时接受的所有自变量。另外,在此记载了将所有的自变量传递给调用栈的情况,但也可以为即使不是函 数调用时间接受的所有自变量,也能够存储其中的多个自变量的结构。例如图17(a)的例 中所说,也可以为将自变量aO和自变量al和自变量a2存储于调用栈的结构。该情况下, 例如只要为存储寄存器0 寄存器2中所存储的三个自变量的结构即可。由此,与仅通过一个自变量进行分支预测的情况相比,可提高分支预测的概率。另外,如图17(b)所示,调用栈113不仅存储寄存器0的自变量,而且还可以将调 用栈113兼用作返回栈。即,在使用返回栈的处理器中,由于在与调用栈相同的定时进行返 回地址的进栈和退栈,所以也可以在相同的栈内成组保持返回地址和自变量。另外,在图 17(b)中,addressA、addressB、addressC 分别表示 funcA、funcB、funcC 的返回地址。由 此,可进行与返回栈的并用。(8)在上述实施方式中,为保持函数的自变量而使用调用栈,但作为调用栈使用的 未必陷于栈形式,只要在上述实施方式中可执行作为调用栈表示的内容即可。(9)也可以将图1及图11所示的信息处理装置100、300的各功能部集成化并由一 或多个LSI (LargekaleIntegration)实现。另外,多个功能部也可以由一个LSI实现。LSI根据集成度的不同有时也称作ICantegratedCircuit)、系统LSI、 VLSI (VeryLargeScaleIntegration)、SLSI (SuperLargeScaleIntegration)、 ULSI (UltraLargeScaleIntegration)等。另外,集成电路化的方法不限于LSI,也可以通过专用电路或通用处理器实现。在也可以在制造了 LSI后,利用可编程的FPGA(Field Programmable Gate Array)、及可再构 成LSI内部的电路单元的连接及设定的可重构处理器。另外,如果因半导体技术的进步或派生的其它技术而置换为LSI的集成电路化的 技术开始应用,则当然也可以使用该技术进行功能块的集成化。。生物技术的应用等也成为 可能。(10)也可以将由用于使上述的实施方式所示的分支预测的动作、分支预测的处理 等(参照图6等)在信息处理装置等的处理器、及与该处理器连接的各种电路执行的程序 代码构成的控制程序记录于记录介质;或者经由各种通信路(例如以电通信回线、无线或 有线通信回线、因特网为代表的网络)等流通且发布。这样的记录介质有IC卡、硬盘、光盘、 磁盘、ROM等。流通发布的控制程序通过存储于可以由处理器读出的存储器等中供利用,通 过该处理器执行其控制程序而实现实施方式所示的各种功能。(11)以下,对本发明的分支预测装置的实施方式和其效果进行说明。本发明的分支预测装置的特征在于,具备指令执行部,执行指令;函数调用通知 部,通知上述指令执行部执行函数调用指令;调用栈,在上述函数调用通知部通知执行函数 调用指令时,存储该函数调用指令的至少一个自变量;分支指令通知部,通知上述指令执行 部执行上述函数调用指令调用的函数中包含的分支指令;分支结果存储部,存储使分支指 令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果 建立了对应的分支结果条目;分支预测部,在上述分支指令通知部通知了执行分支指令的 情况下,检索上述分支结果存储部中是否记录有所执行的该分支指令的地址与存储于上述 调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果设 为该分支指令进行的分支的预测结果;指令取出部,基于上述分支预测部预测的预测结果 取出指令;分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、表示通 过该分支指令的执行而分支的分支目标的地址的分支结果以及执行该分支指令时的上述 调用栈的开头值相对应,并作为分支结果条目记录于上述分支结果存储部。另外,本发明提供一种分支预测方法,由信息处理装置对函数中包含的分支指令 的分支目标进行预测,其特征在于,包括函数调用通知步骤,通知执行函数调用指令;存 储步骤,在通过上述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函 数调用指令的至少一个自变量的调用栈中;分支指令通知步骤,通知执行上述函数调用指 令调用的函数中含有的分支指令;分支预测步骤,在通过上述分支指令通知步骤通知了执 行分支指令的情况下,从分支结果存储介质检索是否记录所执行的该分支指令地址和与存 储于上述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分 支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所 处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立 了对应的分支结果条目的上述计算机连接;指令取出步骤,基于上述分支预测步骤中预测 的预测结果取出指令;以及分支结果记录步骤,使完成分支指令的执行后执行的分支指令 所处的地址、表示通过该分支指令的执行分支的分支目标的地址的分支结果以及执行该分 支指令时的上述调用栈的开头值建立对应,并作为分支结果条目记录于上述分支结果存储 部。另外,本发明提供一种分支预测程序记录介质,其记录有用于由计算机执行预测执行程序时的分支指令的分支目标的分支预测处理的分支预测程序,可计算机读取,其特 征在于,上述分支预测处理包括通知执行函数调用指令的函数调用通知步骤;在通过上 述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函数调用指令的至少 之一的自变量的调用栈的存储步骤;通知执行通过上述函数调用指令调用的函数中含有的 分支指令的分支指令通知步骤;在通过上述分支指令通知步骤通知了执行分支指令的情况 下,从与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值、表示分支目标 的地址的分支结果相对应的分支结果条目的上述计算机连接的分支结果存储介质检索是 否记录所执行的该分支指令地址和与存储于上述调用栈的自变量相一致的分支结果条目, 在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果的分 支预测步骤;基于上述分支预测步骤中预测的预测结果取出指令的指令取出步骤;使完成 分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行分支的分支目 标的地址的分支结果、执行该分支指令时的上述调用栈的开头值相对应,并作为分支结果 条目记录于上述分支结果存储部的分支结果记录步骤。具备调用栈调用函数时取得该函数的自变量的结构,分支结果存储部保持使该自 变量和过去的分支结果相对应的信息,在实际执行分支指令的定时,分支预测部基于分支 指令的地址、和调用栈的开头值从分支结果存储部检索过去的分支结果,在检索成功的情 况下,可将分支结果条目的分支目标作为分支指令的分支目标进行预测。另外,在实际执行分支指令时,在分支结果存储部追加使该分支指令所处的地址、 调用栈的开头值、分支目标的地址相对应的分支结果条目,因此,可以提高之后执行分支指 令时的分支预测的概率。也可以是,上述分支预测装置还具备通知上述指令执行部执行函数返回指令的函 数返回通知部,上述调用栈在从上述函数返回通知部通知了函数返回指令执行时,删除与 该函数返回指令相对应的函数的自变量。由此,使函数返回时,通过删除存储于调用栈的自变量,可以总是将调用栈的开头 值作为现在执行的函数的自变量,分支预测装置可以无错误地作为用于分支预测包含分支 指令的函数的自变量的信息使用。另外,在上述分支预测装置中,也可以是,上述分支指令为带条件分支指令,上述 分支结果记录部还记录表示是否执行带条件分支指令的信息所对应的分支结果条目。由此,在分支指令为条件分支指令的情况下,通过使该条件分支的成否的信息对 应,例如可基于该成否来判定条件分支是否成立,可执行分支预测。另外,在上述分支预测装置中,也可以是,上述分支结果记录部对于分支指令的各 分支目标,将使表示分支的频次的频次信息对应的分支结果条目记录于上述分支结果存储 部,上述分支预测部在有多个检索的分支结果条目的情况下,将分支的频次最高的分支结 果条目的分支目标地址作为预测结果。另外,在上述分支预测装置中,也可以是,上述分支结果记录部在执行分支指令 时,对于该分支指令的分支目标地址、和执行该分支指令时的调用栈的开头值一致的分支 结果条目,将具有实际执行该分支指令而分支的分支目标的条目的频次信息加1,对于除此 之外的该分支指令的分支目标地址、和执行该分支指令时的调用栈的开头值一致的条目的 实际分支的分支目标不同的分支结果条目,将该频次信息減1。
由此,分支结果条目使用于特定执行各分支条目的频次的信息对应,在有多个与 被执行的分支指令的地址和调用栈的开头值相对应的分支结果条目的情况下,可以将这些 分支结果条目中执行频次最高的分支结果条目作为分支目标进行预测。由此,可以提高分 支预测的概率。另外,在上述分支预测装置中,也可以是,上述指令执行部具备用于存储上述自变 量的多个寄存器,上述调用栈取得上述多个寄存器中预定的特定的寄存器所存储的值并将其进行 存储。由此,由于可以将指令执行部的预定的寄存器中存储的值作为自变量传递给调用 栈,所以,以此为前提的装置制作变得容易。另外,本发明也可以提供一种编译器,其将表示含有分支指令的函数的源程序变 更为计算机可执行的执行形式的指令代码串,其中,上述计算机具备存储上述函数的自变 量的调用栈作为用于预测上述分支指令的分支目标的信息,上述编译器在执行上述函数的 调用时,生成用于将该函数的自变量中与上述分支指令相关联的自变量存储于上述调用栈 的指令代码。另外,本发明提供一种编译方法,其用于将表示包含分支指令的函数的源程序变 更为计算机可执行的执行形式的指令代码串,其中,上述计算机具备存储上述函数的自变 量的调用栈作为用于预测上述分支指令的分支目标的信息,上述编译方法在执行上述函数 的调用时,生成用于将该函数的自变量中与上述分支指令相关联的自变量存储于上述调用 栈的指令代码。由此,由于以将传递给调用栈的自变量在函数调用时必须存储于特定的寄存器的 方式控制计算机,所以能够保障将决定函数内的分支指令的分支目标的自变量自变量可靠 地存储于调用栈。产业上的可利用性本发明的分支预测装置有助于程序的执行性能提高,作为促进处理器的处理速度 提高的装置是有用的。因此,如果是使用处理器的装置,则在宽范围的领域是有效的。例如 不仅大型计算机、个人计算机那样的方式,而且在各种家电设备、手机那样的通信设备、产 业设备、控制设备等中也可以加以利用。
权利要求
1.一种分支预测装置,其特征在于,具备指令执行部,执行指令;函数调用通知部,通知所述指令执行部执行函数调用指令;调用栈,在所述函数调用通知部通知执行函数调用指令时,存储该函数调用指令中的 至少一个自变量;分支指令通知部,通知所述指令执行部执行所述函数调用指令调用的函数中包含的分 支指令;分支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值 以及表示分支目标的地址的分支结果建立了对应的分支结果条目;分支预测部,在所述分支指令通知部通知了执行分支指令的情况下,检索所述分支结 果存储部是否记录有所执行的该分支指令的地址与存储于所述调用栈的自变量相一致的 分支结果条目,在有的情况下,将该分支结果条目的分支结果设为该分支指令进行的分支 的预测结果;指令取出部,基于所述分支预测部预测的预测结果取出指令;以及分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该 分支指令的执行而分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用 栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
2.如权利要求1所述的分支预测装置,其特征在于,所述分支预测装置还具备函数返回通知部,该函数返回通知部通知所述指令执行部执 行函数返回指令,在从所述函数返回通知部通知执行函数返回指令时,所述调用栈删除与该函数返回指 令相对应的函数的自变量。
3.如权利要求2所述的分支预测装置,其特征在于,所述分支指令为带条件分支指令,所述分支结果记录部还记录表示是否执行对应了带条件分支指令的信息的分支结果 条目。
4.如权利要求2所述的分支预测装置,其特征在于,所述分支结果记录部对于分支指令的各分支目标,将使表示分支的频次的频次信息对 应的分支结果条目记录于所述分支结果存储部,所述分支预测部在有多个检索的分支结果条目的情况下,将分支的频次最高的分支结 果条目的分支目标地址作为预测结果。
5.如权利要求4所述的分支预测装置,其特征在于,所述分支结果记录部在执行分支指令时,对于该分支指令的分支目标地址、和执行该 分支指令时的调用栈的开头值一致的分支结果条目,将具有实际执行该分支指令而分支的 分支目标的条目的频次信息加1,对于除此之外的该分支指令的分支目标地址和执行该分 支指令时的调用栈的开头值一致的条目的实际分支的分支目标不同的分支结果条目,将该 频次信息減1。
6.如权利要求2所述的分支预测装置,其特征在于,所述指令执行部具备用于存储所述自变量的多个寄存器,所述调用栈取得所述多个寄存器中预先决定的特定的寄存器所存储的值并进行存储。
7.一种分支预测方法,由信息处理装置对函数中包含的分支指令的分支目标进行预 测,其特征在于,包括函数调用通知步骤,通知执行函数调用指令;存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存 储该函数调用指令的至少一个自变量的调用栈中;分支指令通知步骤,通知执行所述函数调用指令调用的函数中含有的分支指令;分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支 结果存储介质检索是否记录所执行的该分支指令地址和与存储于所述调用栈的自变量相 一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行 的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令 时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目的 所述计算机连接;指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;以及分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、表示通过 该分支指令的执行分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用 栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
8.一种编译器,将表示包含有分支指令的函数的源程序变更为计算机可执行的执行形 式的指令代码串,其特征在于,所述计算机具备存储所述函数的自变量的调用栈作为用于预测所述分支指令的分支 目标的信息,所述编译器在执行所述函数的调用时,生成用于将该函数的自变量中与所述分支指令 相关联的自变量存储于所述调用栈的指令代码。
9.一种编译方法,用于将表示包含分支指令的函数的源程序变更为计算机可执行的执 行形式的指令代码串,其特征在于,所述计算机具备存储所述函数的自变量的调用栈作为用于预测所述分支指令的分支 目标的信息,所述编译方法包含在执行所述函数的调用时,生成用于将该函数的自变量中与所述分 支指令相关联的自变量存储于所述调用栈的指令代码的存储代码生成步骤。
10.一种计算可读的分支预测程序记录介质,记录有用于由计算机执行预测执行程序 时的分支指令的分支目标的分支预测处理的分支预测程序,其特征在于,所述分支预测处理包括函数调用通知步骤,通知执行函数调用指令;存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存 储该函数调用指令中的至少一个自变量;分支指令通知步骤,通知执行所述函数调用指令调用的函数中包含的分支指令;分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支 结果存储介质中检索是否记录所执行的该分支指令地址与存储于所述调用栈的自变量相 一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令 时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目的 所述计算机连接;指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;以及 分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、表示通过 该分支指令的执行分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用 栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
全文摘要
本发明提供分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质。包含于信息处理装置(100)的分支预测机构(1000)具备以进行函数调用的定时将该函数的自变量进行堆栈的调用栈(113)。在调用栈(113)中存储与函数内的分支指令相关联的自变量。分支预测机构(1000)将使分支指令所处的地址、执行该分支指令的定时的调用栈(113)的开头值、以及执行分支指令时的分支目标的地址建立了对应的信息存储于分支结果缓冲器(116)。分支预测部(117)在通知了执行分支指令时,取得该分支指令所处的地址和此时的调用栈(113)的开头值,且检索与该地址和开头值相对应的分支目标是否处于分支结果缓冲器(116),将其作为执行检索得到的分支目标的分支指令的分支目标进行预测。指令取出部(118)取出处于分支预测部(117)所预测的分支目标的指令。
文档编号G06F9/38GK102099781SQ20108000213
公开日2011年6月15日 申请日期2010年5月19日 优先权日2009年5月19日
发明者天野克重 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1