CN102099781A - 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 - Google Patents
分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 Download PDFInfo
- Publication number
- CN102099781A CN102099781A CN2010800021370A CN201080002137A CN102099781A CN 102099781 A CN102099781 A CN 102099781A CN 2010800021370 A CN2010800021370 A CN 2010800021370A CN 201080002137 A CN201080002137 A CN 201080002137A CN 102099781 A CN102099781 A CN 102099781A
- Authority
- CN
- China
- Prior art keywords
- branch
- instruction
- outcome
- function
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 71
- 238000003860 storage Methods 0.000 claims description 72
- 230000014509 gene expression Effects 0.000 claims description 67
- 230000008569 process Effects 0.000 claims description 37
- 230000003750 conditioning effect Effects 0.000 claims description 35
- 238000012217 deletion Methods 0.000 claims description 11
- 230000037430 deletion Effects 0.000 claims description 11
- 230000007246 mechanism Effects 0.000 abstract description 5
- 230000010365 information processing Effects 0.000 abstract 1
- 230000006870 function Effects 0.000 description 252
- 230000009471 action Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 15
- 239000000203 mixture Substances 0.000 description 11
- 230000005055 memory storage Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 230000003455 independent Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 101150026213 atpB gene Proteins 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 101150090348 atpC gene Proteins 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
Abstract
本发明提供分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质。包含于信息处理装置(100)的分支预测机构(1000)具备以进行函数调用的定时将该函数的自变量进行堆栈的调用栈(113)。在调用栈(113)中存储与函数内的分支指令相关联的自变量。分支预测机构(1000)将使分支指令所处的地址、执行该分支指令的定时的调用栈(113)的开头值、以及执行分支指令时的分支目标的地址建立了对应的信息存储于分支结果缓冲器(116)。分支预测部(117)在通知了执行分支指令时,取得该分支指令所处的地址和此时的调用栈(113)的开头值,且检索与该地址和开头值相对应的分支目标是否处于分支结果缓冲器(116),将其作为执行检索得到的分支目标的分支指令的分支目标进行预测。指令取出部(118)取出处于分支预测部(117)所预测的分支目标的指令。
Description
技术领域
本发明涉及在信息处理装置执行的指令的分支预测。
背景技术
处理器指令中有时包含向指定的地址跳转的分支指令。现在的处理器中,指令通过管线构造执行。
在管线执行指令时,在某指令的执行结束之前,先行取出位于该之前的地址的指令。在此,有时在执行分支指令时变更程序的流程,且不需要所取出的指令。因此,不需要所取出的指令,需要重新取出分支目标的指令的地址。
该指令取出的更正成为引起进入管线的中途的指令处理的废弃(将其称作管线危害)而使处理器的执行性能降低的一要因。
因此,对于处理器,预测分支指令的分支目标是重要的。
分支指令的一种中有条件分支指令。条件分支指令是指通过此时的运算结果决定是否产生分支的分支指令。在未产生分支的情况下,执行后续的指令,在产生分支的情况下,以固定的分支目标的地址执行所指定的指令。
在该条件分支指令中,有从过去的分支结果推测是否发生分支并决定分支目标的技术。即,通过过去的分支结果取得是否发生分支的统计,将是否发生分支的概率高的一方预测为分支目标。由此,可以提高条件分支指令的分支预测的概率。
但是,分支指令中,作为更复杂的分支,有被称作间接分支的分支。间接分支是指向在某寄存器设定的值的跳转指令、及程序计数器的地址代入引起的跳转等、跳转目标不一定的分支。
在间接分支中,不仅条件分支引起的分支与否不一定,而且跳转目标也不一定,因此,单纯的分支预测功能中,不能进行分支目标的预测。
作为预测间接分支的一个现有技术,有返回栈。函数执行后的返回目标通过函数的调用方改变,因此,将调用方的地址记录于存储器上的栈等中,在从函数恢复(返回)时,向该地址跳转。在函数调用时将返回目标地址保存于专用的返回栈,在取出来自函数的返回指令时,以取得存储器上的返回方地址的跳转的处理为开头,为从返回栈取得返回地址并在下次取出,而作为地址的预测使用。
另外,作为相对于间接分支的分支预测的一个技术,有将有助于间接分支的结果的键信息在程序中通过程序使用专用的隐式操作指令指定键信息,预测分支目标(参照专利文献1)。
先行技术文献
专利文献1:日本特表2004-533695号公报
发明的概要
发明要解决的课题
但是,在上述专利文献1所记载的技术中,需要使用专用的隐式操作指令对处理器通知键信息,存在在成为预测对象的程序内编入隐式操作指令的麻烦。
发明内容
本发明用于减轻上述麻烦,其目的在于,提供一种分支预测装置,不在程序中编入所述的隐式操作指令那样的专用的处理,而对任意的程序预测包含间接分支的程序的分支。
为解决上述课题,本发明提供一种分支预测装置,其特征在于,具备:指令执行部,执行指令;函数调用通知部,通知所述指令执行部执行函数调用指令;调用栈,在所述函数调用通知部通知执行函数调用指令时,存储该函数调用指令的中至少一个自变量;分支指令通知部,通知所述指令执行部执行所述函数调用指令调用的函数中包含的分支指令;分支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目;分支预测部,在所述分支指令通知部通知了执行分支指令的情况下,检索所述分支结果存储部是否记录有所执行的该分支指令的地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果设为该分支指令进行的分支的预测结果;指令取出部,基于所述分支预测部预测的预测结果取出指令;以及分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行而分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
在此,函数是指计算机程序中的所谓的子程序。
根据上述那样的结构,分支预测装置在执行函数的调用时,调用栈取得该函数的自变量,在执行分支指令时,可使用调用栈保持的自变量和过去的分支结果预测分支。由此,用户即使不在程序中编入所述专利文献1中的隐式操作指令那样的特殊的指令,分支预测装置也能够作为成为用于分支预测的键的信息自动取得该分支指令所属的函数的自变量,实现分支预测,可以以任意的程序实现间接分支的分支预测。
附图说明
图1是表示实施方式的分支预测装置的功能结构的功能框图;
图2是表示自变量向调用栈113的传递方法的概要图;
图3是表示存储于分支结果缓冲器的分支结果信息的结构例的数据概念图;
图4是表示执行程序并将自变量存储于调用栈的样态的概要图;
图5是表示分支预测部117执行的分支预测时的检索方法的概要图;
图6是表示信息处理装置100的分支预测的动作的流程图;
图7是表示高级语言程序、该高级语言程序的汇编代码、存储于调用栈的自变量的关系的关系图;
图8是表示编译器119的编译中的动作的流程图;
图9是表示执行编译器119编译的指令时的指令执行部110的动作的流程图;
图10是表示函数的自变量、分支指令的自变量、存储于调用栈的自变量的关系的关系图;
图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为所谓的FILO(FirstInLastOut/先入后出)型的存储器,在本说明书中,将在使从调用栈113保持的自变量退栈时输出的值记载为调用栈113的开头值。通过进行上述的进栈和退栈,成为在调用栈113的开头值必须保持现在执行的函数的自变量的结构。
图2是表示调用栈113中的处理、即自变量的取得方法的详细的图。
对于自变量向函数的过渡方法也被预先决定,函数的自变量通常按高级语言程序中记载的顺序从对指令执行部110保持的寄存器组120的各寄存器分配的序号小的部分依次存储。即,以寄存器0存储函数的第一自变量、寄存器1存储函数的第二自变量、寄存器2存储函数的第三自变量、…这样的方式对各寄存器存储自变量。这样,存储于寄存器的自变量中,在本实施方式中如图2所示,调用栈113取得存储于寄存器0的自变量并存储。
另外,图4表示自变量向调用栈113的存储的顺序之一具体例。
程序400的函数funcA接收自变量a0、a1、a2。该自变量a0被存储于寄存器0中,向调用栈113进栈。在函数funcA内,程序400调用函数funcB。函数funcB接收自变量b0、b1、b2。自变量b0存储于寄存器0,且向调用栈113进栈。在函数funcB内,程序400调用函数funcC。函数funcC接收自变量c0、c1、c2。自变量c0存储于寄存器0,向调用栈113进栈。图4的程序400的右横表示此时的调用栈113所保持的自变量的信息,观察图4表明,最后调出的函数funcC的第一自变量即c0成为开头值。另外,图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指令判定寄存器r0、即函数interpreter的自变量是否为A。在等同于A的情况下,在寄存器r1存储数值0x01000。同样,如果r0为B,则在寄存器r1存储0x2000。通过位于地址0x0100的mv指令在程序计数器(pc)中代入寄存器r1的值,产生分支。即,若函数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文例如在C语言、C++、PHP(Hypertext Preprocessor。另外,PHP为Personal Home Pagetools的简称,但PHP的本来意思为HypertextPreprocessor。)等语言中使用。为使本实施方式的信息处理装置100的分支预测部成功预测,需要将对分支有影响的函数的自变量存储于调用栈113。图10表示用于此的自变量对寄存器的存储方法。
在图10(a)的程序1001中,对于对switch文有影响的自变量,由于switch文的自变量为a0,所以可知与分支相关的自变量也为a0。因此,在进行函数funcA的调用时,需要对调用栈113传递自变量a0。因此,采用将funcA的第一自变量即a0存储于寄存器0的结构。该情况下的编译器119生成的代码例如通过将第一自变量存储于寄存器0的指令、例如“mv r0(a0)”等实现。如上所述,传递给调用栈113的自变量为存储于寄存器0的值,由此,将与分支相关的自变量存储于调用栈113。
另一方面,在图10(b)的程序1002中,与switch文相关联的自变量为b1。该自变量b1成为函数funcB的第二自变量。因此,在图10(b)的情况下,funcB的第二自变量b1成为被存储于寄存器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文有影响的自变量为a0。图12(a)所示的指令arg通知对分支有影响的自变量。图12(a)的指令arg的操作数0表示存储有对分支有影响的自变量的寄存器组120的寄存器序号。因此,在图12(a)的情况下,调用栈123对通过arg指令指定的寄存器0的值进栈。
在图12(b)中,对分支有影响的自变量为b1。图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文所示,该自变量在各分支中,自变量a1、a0对分支有影响。因此,如处理器指令串的arg指令所示,高级语言程序的函数调用时的自变量的顺序(a0、a1、a2)中的a0和a1的顺序作为相反的指令串被编译。
而且,调用栈123按该顺序将自变量进栈。即,先将a0进栈,然后将a1进栈。由此,在执行分支指令时,可以将与各分支指令相关联的自变量作为分支预测的键信息使用。另外,分支的预测、向分支结果缓冲器的分支结果是,向条目的存储利用从调用栈退栈的自变量。
另外,图13(a)所示的结构也可以通过图13(b)所示的结构实现。即,如图13(b)所示,调用栈123为可保持多个自变量的结构。图13(b)表示调用栈123可以一阶段保持多个自变量的情况。分支预测部117在进行分支预测时,按顺序使用在调用栈123的相同阶段存储的值。
关于将哪一自变量存储于哪一寄存器,如上述实施方式、变形例所示可通过编译器119生成指定存储于寄存器中的变量的代码来实现。
(5)在上述实施方式中,表示间接分支的例子,但在执行固定了分支目标的分支指令的条件时,也可以进行预测。
图14表示固定了分支目标时的向分支结果缓冲器116进行记录的例子。在图14的程序例中,以tst指令判断寄存器r0的值是否等同于a,且是否基于其结果执行条件分支指令bleq。执行bleq指令时发生向由r1所示的地址的分支。
存储于分支结果缓冲器116的分支结果信息使分支指令所处的分支指令地址301、调用栈113的开头值302、是否发生分支的分支结果相对应。
分支预测部117在执行条件分支指令时,检索分支结果缓冲器116中是否有与该条件分支指令所处的地址、和此时的调用栈113的开头值相一致的分支结果条目,在有的情况下,在表示该分支结果为条目的分支304进行了分支的情况下,将固定的分支目标的地址通知给指令取出部118,在没有分支的情况下,将条件分支指令的下一地址通知给指令取出部118。
根据该结构,不仅可进行间接分支,而且还可以进行条件分支的分支预测。
(6)在上述实施方式中,表示指令执行部110具备用于存储自变量的寄存器组120的结构。
在此,对指令执行部110具备寄存器组120的结构以外的结构进行说明。即,使用图15说明将指令执行部110设为将自变量存储于存储装置200的结构的情况。
该情况下,指令执行部110具备表示将自变量存储于何处的栈指针寄存器1501。而且,存储装置200在由栈指针寄存器1501所示的栈1502中存储函数的自变量。调用栈113在通过函数调用通知部112通知了函数的调用的情况下,从指令执行部110取得栈指针寄存器1501的值,将由存储装置200的该栈指针寄存器1501所示的栈1502中存储的值作为自变量取得并存储。
即使为这样的结构,调用栈113也能够将与分支指令相关联的函数调用时的自变量进栈。
图16表示使用图15所示的方法进行自变量的取得的情况的具体例。
如图16(a)所示,在调用程序501中的funcA时,以a0到达栈1602的开头的方式存储该函数a0、a1、a2。此时,在栈指针寄存器1501中存储栈1602的开头地址。
而且,在执行分支指令(图16(a)的switch文)的定时,调用栈113中,在调用栈113中存储在由栈指针寄存器1501所示的地址即栈1602的开头保持的a0。
另外,如图16(b)所示,在调用程序502中的funcB时,以与分支指令相关联的b1到达栈1602的开头的方式存储该函数b0、b1、b2。此时,在栈指针寄存器1501中存储栈1602的开头地址。
而且,在执行分支指令(图16(b)的switch文)的定时,在调用栈113中,在调用栈113存储在由栈指针寄存器1501所示的地址即栈1602的开头保持的b1。
(7)在上述实施方式中,表示在调用栈113中存储近存储于寄存器0的值的结构。
在此,表示作为本发明的思想包含的其以外的实施方式。
图17(a)表示的是取得大量调用栈113的容量,不仅存储存储于寄存器0的自变量,而且还存储函数调用时接受的所有自变量。
另外,在此记载了将所有的自变量传递给调用栈的情况,但也可以为即使不是函数调用时间接受的所有自变量,也能够存储其中的多个自变量的结构。例如图17(a)的例中所说,也可以为将自变量a0和自变量a1和自变量a2存储于调用栈的结构。该情况下,例如只要为存储寄存器0~寄存器2中所存储的三个自变量的结构即可。
由此,与仅通过一个自变量进行分支预测的情况相比,可提高分支预测的概率。
另外,如图17(b)所示,调用栈113不仅存储寄存器0的自变量,而且还可以将调用栈113兼用作返回栈。即,在使用返回栈的处理器中,由于在与调用栈相同的定时进行返回地址的进栈和退栈,所以也可以在相同的栈内成组保持返回地址和自变量。另外,在图17(b)中,addressA、addressB、addressC分别表示funcA、funcB、funcC的返回地址。由此,可进行与返回栈的并用。
(8)在上述实施方式中,为保持函数的自变量而使用调用栈,但作为调用栈使用的未必陷于栈形式,只要在上述实施方式中可执行作为调用栈表示的内容即可。
(9)也可以将图1及图11所示的信息处理装置100、300的各功能部集成化并由一或多个LSI(LargeScaleIntegration)实现。另外,多个功能部也可以由一个LSI实现。
LSI根据集成度的不同有时也称作IC(IntegratedCircuit)、系统LSI、VLSI(VeryLargeScaleIntegration)、SLSI(SuperLargeScaleIntegration)、ULSI(UltraLargeScaleIntegration)等。
另外,集成电路化的方法不限于LSI,也可以通过专用电路或通用处理器实现。在也可以在制造了LSI后,利用可编程的FPGA(Field Programmable Gate Array)、及可再构成LSI内部的电路单元的连接及设定的可重构处理器。
另外,如果因半导体技术的进步或派生的其它技术而置换为LSI的集成电路化的技术开始应用,则当然也可以使用该技术进行功能块的集成化。。生物技术的应用等也成为可能。
(10)也可以将由用于使上述的实施方式所示的分支预测的动作、分支预测的处理等(参照图6等)在信息处理装置等的处理器、及与该处理器连接的各种电路执行的程序代码构成的控制程序记录于记录介质;或者经由各种通信路(例如以电通信回线、无线或有线通信回线、因特网为代表的网络)等流通且发布。这样的记录介质有IC卡、硬盘、光盘、磁盘、ROM等。流通发布的控制程序通过存储于可以由处理器读出的存储器等中供利用,通过该处理器执行其控制程序而实现实施方式所示的各种功能。
(11)以下,对本发明的分支预测装置的实施方式和其效果进行说明。
本发明的分支预测装置的特征在于,具备:指令执行部,执行指令;函数调用通知部,通知上述指令执行部执行函数调用指令;调用栈,在上述函数调用通知部通知执行函数调用指令时,存储该函数调用指令的至少一个自变量;分支指令通知部,通知上述指令执行部执行上述函数调用指令调用的函数中包含的分支指令;分支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目;分支预测部,在上述分支指令通知部通知了执行分支指令的情况下,检索上述分支结果存储部中是否记录有所执行的该分支指令的地址与存储于上述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果设为该分支指令进行的分支的预测结果;指令取出部,基于上述分支预测部预测的预测结果取出指令;分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行而分支的分支目标的地址的分支结果以及执行该分支指令时的上述调用栈的开头值相对应,并作为分支结果条目记录于上述分支结果存储部。
另外,本发明提供一种分支预测方法,由信息处理装置对函数中包含的分支指令的分支目标进行预测,其特征在于,包括:函数调用通知步骤,通知执行函数调用指令;存储步骤,在通过上述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函数调用指令的至少一个自变量的调用栈中;分支指令通知步骤,通知执行上述函数调用指令调用的函数中含有的分支指令;分支预测步骤,在通过上述分支指令通知步骤通知了执行分支指令的情况下,从分支结果存储介质检索是否记录所执行的该分支指令地址和与存储于上述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目的上述计算机连接;指令取出步骤,基于上述分支预测步骤中预测的预测结果取出指令;以及分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行分支的分支目标的地址的分支结果以及执行该分支指令时的上述调用栈的开头值建立对应,并作为分支结果条目记录于上述分支结果存储部。
另外,本发明提供一种分支预测程序记录介质,其记录有用于由计算机执行预测执行程序时的分支指令的分支目标的分支预测处理的分支预测程序,可计算机读取,其特征在于,上述分支预测处理包括:通知执行函数调用指令的函数调用通知步骤;在通过上述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函数调用指令的至少之一的自变量的调用栈的存储步骤;通知执行通过上述函数调用指令调用的函数中含有的分支指令的分支指令通知步骤;在通过上述分支指令通知步骤通知了执行分支指令的情况下,从与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值、表示分支目标的地址的分支结果相对应的分支结果条目的上述计算机连接的分支结果存储介质检索是否记录所执行的该分支指令地址和与存储于上述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果的分支预测步骤;基于上述分支预测步骤中预测的预测结果取出指令的指令取出步骤;使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行分支的分支目标的地址的分支结果、执行该分支指令时的上述调用栈的开头值相对应,并作为分支结果条目记录于上述分支结果存储部的分支结果记录步骤。
具备调用栈调用函数时取得该函数的自变量的结构,分支结果存储部保持使该自变量和过去的分支结果相对应的信息,在实际执行分支指令的定时,分支预测部基于分支指令的地址、和调用栈的开头值从分支结果存储部检索过去的分支结果,在检索成功的情况下,可将分支结果条目的分支目标作为分支指令的分支目标进行预测。
另外,在实际执行分支指令时,在分支结果存储部追加使该分支指令所处的地址、调用栈的开头值、分支目标的地址相对应的分支结果条目,因此,可以提高之后执行分支指令时的分支预测的概率。
也可以是,上述分支预测装置还具备通知上述指令执行部执行函数返回指令的函数返回通知部,上述调用栈在从上述函数返回通知部通知了函数返回指令执行时,删除与该函数返回指令相对应的函数的自变量。
由此,使函数返回时,通过删除存储于调用栈的自变量,可以总是将调用栈的开头值作为现在执行的函数的自变量,分支预测装置可以无错误地作为用于分支预测包含分支指令的函数的自变量的信息使用。
另外,在上述分支预测装置中,也可以是,上述分支指令为带条件分支指令,上述分支结果记录部还记录表示是否执行带条件分支指令的信息所对应的分支结果条目。
由此,在分支指令为条件分支指令的情况下,通过使该条件分支的成否的信息对应,例如可基于该成否来判定条件分支是否成立,可执行分支预测。
另外,在上述分支预测装置中,也可以是,上述分支结果记录部对于分支指令的各分支目标,将使表示分支的频次的频次信息对应的分支结果条目记录于上述分支结果存储部,上述分支预测部在有多个检索的分支结果条目的情况下,将分支的频次最高的分支结果条目的分支目标地址作为预测结果。
另外,在上述分支预测装置中,也可以是,上述分支结果记录部在执行分支指令时,对于该分支指令的分支目标地址、和执行该分支指令时的调用栈的开头值一致的分支结果条目,将具有实际执行该分支指令而分支的分支目标的条目的频次信息加1,对于除此之外的该分支指令的分支目标地址、和执行该分支指令时的调用栈的开头值一致的条目的实际分支的分支目标不同的分支结果条目,将该频次信息減1。
由此,分支结果条目使用于特定执行各分支条目的频次的信息对应,在有多个与被执行的分支指令的地址和调用栈的开头值相对应的分支结果条目的情况下,可以将这些分支结果条目中执行频次最高的分支结果条目作为分支目标进行预测。由此,可以提高分支预测的概率。
另外,在上述分支预测装置中,也可以是,上述指令执行部具备用于存储上述自变量的多个寄存器,
上述调用栈取得上述多个寄存器中预定的特定的寄存器所存储的值并将其进行存储。
由此,由于可以将指令执行部的预定的寄存器中存储的值作为自变量传递给调用栈,所以,以此为前提的装置制作变得容易。
另外,本发明也可以提供一种编译器,其将表示含有分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其中,上述计算机具备存储上述函数的自变量的调用栈作为用于预测上述分支指令的分支目标的信息,上述编译器在执行上述函数的调用时,生成用于将该函数的自变量中与上述分支指令相关联的自变量存储于上述调用栈的指令代码。
另外,本发明提供一种编译方法,其用于将表示包含分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其中,上述计算机具备存储上述函数的自变量的调用栈作为用于预测上述分支指令的分支目标的信息,上述编译方法在执行上述函数的调用时,生成用于将该函数的自变量中与上述分支指令相关联的自变量存储于上述调用栈的指令代码。
由此,由于以将传递给调用栈的自变量在函数调用时必须存储于特定的寄存器的方式控制计算机,所以能够保障将决定函数内的分支指令的分支目标的自变量自变量可靠地存储于调用栈。
产业上的可利用性
本发明的分支预测装置有助于程序的执行性能提高,作为促进处理器的处理速度提高的装置是有用的。因此,如果是使用处理器的装置,则在宽范围的领域是有效的。例如不仅大型计算机、个人计算机那样的方式,而且在各种家电设备、手机那样的通信设备、产业设备、控制设备等中也可以加以利用。
权利要求书(按照条约第19条的修改)
1.(修正后)一种分支预测装置,其特征在于,具备:
指令执行部,执行指令;
函数调用通知部,通知所述指令执行部执行函数调用指令;
调用栈,在通过所述函数调用通知部通知了执行函数调用指令时,存储通过所述函数调用指令调用的函数中的至少一个自变量;
分支指令通知部,通知所述指令执行部执行分支指令,该分支指令包含在所述函数调用指令调用的函数中;
分支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及分支目标建立了对应的分支结果条目;
分支预测部,在所述分支指令通知部通知了执行分支指令的情况下,检索所述分支结果存储部中是否记录有所执行的该分支指令的地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果设为该分支指令进行的分支的预测结果;
指令取出部,基于所述分支预测部预测的预测结果取出指令;
分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、通过执行该分支指令而分支的分支目标的地址以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部;以及
函数返回通知部,通知所述指令执行部执行函数返回指令;
所述调用栈在从所述函数返回通知部通知了执行函数返回指令时,删除与该函数返回指令相对应的函数的自变量。
2.(修正后)如权利要求1所述的分支预测装置,其特征在于,
所述分支指令为带条件分支指令,
所述分支结果记录部还记录对应了表示是否执行带条件分支指令的信息的分支结果条目。
3.(修正后)如权利要求1所述的分支预测装置,其特征在于,
所述分支结果记录部对于分支指令的各分支目标,将使表示分支的次数的次数信息建立了对应的分支结果条目记录于所述分支结果存储部,
所述分支预测部在有多个检索的分支结果条目的情况下,将次数信息所示的次数为最高的分支结果条目的分支目标地址作为预测结果。
4.(修正后)如权利要求3所述的分支预测装置,其特征在于,
所述分支结果记录部在执行分支指令时,对于该分支指令的分支目标地址与执行该分支指令时的调用栈的开头值一致的分支结果条目,将具有实际执行该分支指令而分支的分支目标的条目的频次信息加1,对于除此之外的该分支指令的分支目标地址与执行该分支指令时的调用栈的开头值一致的分支结果条目的实际分支的分支目标不同的分支结果条目,将其频次信息減1。
5.(修正后)如权利要求1所述的分支预测装置,其特征在于,
所述指令执行部具备用于存储所述自变量的多个寄存器,
所述调用栈取得所述多个寄存器中预先决定的特定的寄存器所存储的值并进行存储。
6.(修正后)一种分支预测方法,由信息处理装置对函数中包含的分支指令的分支目标进行预测,其特征在于,包括:
函数调用通知步骤,通知执行函数调用指令;
存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储通过所述函数调用指令调用的函数中的至少一个自变量的调用栈中;
分支指令通知步骤,通知执行通过所述函数调用指令调用的函数中包含的分支指令;
分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支结果存储介质中检索是否记录所执行的该分支指令地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储有使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及分支目标建立了对应的分支结果条目的所述计算机连接;
指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;
分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、通过执行该分支指令而分支的分支目标的地址以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部;
函数返回通知步骤,通知执行函数返回指令;以及
删除步骤,在所述函数返回通知步骤通知了执行函数返回指令时,从所述调用栈中删除与该函数返回指令相对应的函数的自变量。
7.(修正后)一种编译器,将表示包含有分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其特征在于,
所述计算机具备调用栈,该调用栈存储所述函数的自变量作为用于预测所述分支指令的分支目标的信息,且在通知了执行函数返回指令时,删除与该函数返回指令相对应的函数的自变量,
所述编译器在执行所述函数的调用时,生成用于将该函数的自变量中与所述分支指令相关联的自变量存储于所述调用栈的指令代码。
8.(修正后)一种编译方法,用于将表示包含有分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其特征在于,
所述计算机具备调用栈,该调用栈存储所述函数的自变量作为用于预测所述分支指令的分支目标的信息,且在通知了执行函数返回指令时,删除与该函数返回指令相对应的函数的自变量,
所述编译方法包含存储代码生成步骤,该存储代码生成步骤在执行所述函数的调用时,生成用于将该函数的自变量中与所述分支指令相关联的自变量存储于所述调用栈的指令代码。
9.(修正后)一种计算机可读的分支预测程序记录介质,记录有用于由计算机执行预测执行程序时的分支指令的分支目标的分支预测处理的分支预测程序,可计算机读取,其特征在于,
所述分支预测处理包括:
函数调用通知步骤,通知执行函数调用指令;
存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储通过所述函数调用指令调用的函数中的至少一个自变量的调用栈中;
分支指令通知步骤,通知执行所述函数调用指令调用的函数中包含的分支指令;
分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支结果存储介质中检索是否记录有所执行的该分支指令地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及分支目标建立了对应的分支结果条目的所述计算机连接;
指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;
分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、通过执行该分支指令而分支的分支目标的地址以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部;
函数返回通知步骤,通知执行函数返回指令;以及
删除步骤,在所述函数返回通知步骤通知了执行函数返回指令时,从所述调用栈中删除与该函数返回指令相对应的函数的自变量。
10.(删除)
Claims (10)
1.一种分支预测装置,其特征在于,具备:
指令执行部,执行指令;
函数调用通知部,通知所述指令执行部执行函数调用指令;
调用栈,在所述函数调用通知部通知执行函数调用指令时,存储该函数调用指令中的至少一个自变量;
分支指令通知部,通知所述指令执行部执行所述函数调用指令调用的函数中包含的分支指令;
分支结果存储部,存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目;
分支预测部,在所述分支指令通知部通知了执行分支指令的情况下,检索所述分支结果存储部是否记录有所执行的该分支指令的地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果设为该分支指令进行的分支的预测结果;
指令取出部,基于所述分支预测部预测的预测结果取出指令;以及
分支结果记录部,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行而分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
2.如权利要求1所述的分支预测装置,其特征在于,
所述分支预测装置还具备函数返回通知部,该函数返回通知部通知所述指令执行部执行函数返回指令,
在从所述函数返回通知部通知执行函数返回指令时,所述调用栈删除与该函数返回指令相对应的函数的自变量。
3.如权利要求2所述的分支预测装置,其特征在于,
所述分支指令为带条件分支指令,
所述分支结果记录部还记录表示是否执行对应了带条件分支指令的信息的分支结果条目。
4.如权利要求2所述的分支预测装置,其特征在于,
所述分支结果记录部对于分支指令的各分支目标,将使表示分支的频次的频次信息对应的分支结果条目记录于所述分支结果存储部,
所述分支预测部在有多个检索的分支结果条目的情况下,将分支的频次最高的分支结果条目的分支目标地址作为预测结果。
5.如权利要求4所述的分支预测装置,其特征在于,
所述分支结果记录部在执行分支指令时,对于该分支指令的分支目标地址、和执行该分支指令时的调用栈的开头值一致的分支结果条目,将具有实际执行该分支指令而分支的分支目标的条目的频次信息加1,对于除此之外的该分支指令的分支目标地址和执行该分支指令时的调用栈的开头值一致的条目的实际分支的分支目标不同的分支结果条目,将该频次信息減1。
6.如权利要求2所述的分支预测装置,其特征在于,
所述指令执行部具备用于存储所述自变量的多个寄存器,
所述调用栈取得所述多个寄存器中预先决定的特定的寄存器所存储的值并进行存储。
7.一种分支预测方法,由信息处理装置对函数中包含的分支指令的分支目标进行预测,其特征在于,包括:
函数调用通知步骤,通知执行函数调用指令;
存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函数调用指令的至少一个自变量的调用栈中;
分支指令通知步骤,通知执行所述函数调用指令调用的函数中含有的分支指令;
分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支结果存储介质检索是否记录所执行的该分支指令地址和与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目的所述计算机连接;
指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;以及
分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
8.一种编译器,将表示包含有分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其特征在于,
所述计算机具备存储所述函数的自变量的调用栈作为用于预测所述分支指令的分支目标的信息,
所述编译器在执行所述函数的调用时,生成用于将该函数的自变量中与所述分支指令相关联的自变量存储于所述调用栈的指令代码。
9.一种编译方法,用于将表示包含分支指令的函数的源程序变更为计算机可执行的执行形式的指令代码串,其特征在于,
所述计算机具备存储所述函数的自变量的调用栈作为用于预测所述分支指令的分支目标的信息,
所述编译方法包含在执行所述函数的调用时,生成用于将该函数的自变量中与所述分支指令相关联的自变量存储于所述调用栈的指令代码的存储代码生成步骤。
10.一种计算可读的分支预测程序记录介质,记录有用于由计算机执行预测执行程序时的分支指令的分支目标的分支预测处理的分支预测程序,其特征在于,
所述分支预测处理包括:
函数调用通知步骤,通知执行函数调用指令;
存储步骤,在通过所述函数调用通知步骤通知了执行函数调用指令时,将其存储于存储该函数调用指令中的至少一个自变量;
分支指令通知步骤,通知执行所述函数调用指令调用的函数中包含的分支指令;
分支预测步骤,在通过所述分支指令通知步骤通知了执行分支指令的情况下,从分支结果存储介质中检索是否记录所执行的该分支指令地址与存储于所述调用栈的自变量相一致的分支结果条目,在有的情况下,将该分支结果条目的分支结果作为该分支指令进行的分支的预测结果,该分支结果存储介质与存储使分支指令所处的地址、执行该分支指令时的调用栈的开头值以及表示分支目标的地址的分支结果建立了对应的分支结果条目的所述计算机连接;
指令取出步骤,基于所述分支预测步骤中预测的预测结果取出指令;以及
分支结果记录步骤,使完成分支指令的执行后执行的分支指令所处的地址、表示通过该分支指令的执行分支的分支目标的地址的分支结果以及执行该分支指令时的所述调用栈的开头值建立对应,并作为分支结果条目记录于所述分支结果存储部。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009-120583 | 2009-05-19 | ||
JP2009120583 | 2009-05-19 | ||
PCT/JP2010/003357 WO2010134330A1 (ja) | 2009-05-19 | 2010-05-19 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102099781A true CN102099781A (zh) | 2011-06-15 |
Family
ID=43126023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010800021370A Pending CN102099781A (zh) | 2009-05-19 | 2010-05-19 | 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8694760B2 (zh) |
JP (1) | JP5347023B2 (zh) |
CN (1) | CN102099781A (zh) |
WO (1) | WO2010134330A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105718241A (zh) * | 2016-01-18 | 2016-06-29 | 北京时代民芯科技有限公司 | 一种基于sparc v8体系结构的分类式混合分支预测系统 |
CN106648636A (zh) * | 2016-12-08 | 2017-05-10 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测系统及方法 |
CN107925690A (zh) * | 2015-09-30 | 2018-04-17 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN108897699A (zh) * | 2018-07-03 | 2018-11-27 | 中国人民解放军国防科技大学 | 一种基于函数调用栈的数据预取方法和装置 |
CN109240815A (zh) * | 2018-08-24 | 2019-01-18 | 珠海格力电器股份有限公司 | 一种共享堆栈的多任务运行方法、装置及设备 |
CN111176729A (zh) * | 2018-11-13 | 2020-05-19 | 深圳市中兴微电子技术有限公司 | 一种信息处理方法、装置及计算机可读存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9652245B2 (en) | 2012-07-16 | 2017-05-16 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Branch prediction for indirect jumps by hashing current and previous branch instruction addresses |
CN103984525B (zh) * | 2013-02-08 | 2017-10-20 | 上海芯豪微电子有限公司 | 指令处理系统及方法 |
US9639368B2 (en) * | 2014-06-13 | 2017-05-02 | International Business Machines Corporation | Branch prediction based on correlating events |
JP2018200545A (ja) * | 2017-05-26 | 2018-12-20 | ルネサスエレクトロニクス株式会社 | プロセッサ装置 |
EP3640796A4 (en) * | 2017-06-02 | 2020-06-03 | Mitsubishi Electric Corporation | PROGRAM CODE GENERATION DEVICE AND TWO-DIMENSIONAL CODE GENERATION PROGRAM |
JP6720993B2 (ja) * | 2018-03-07 | 2020-07-08 | オムロン株式会社 | サポート装置およびサポートプログラム |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004533695A (ja) * | 2001-06-29 | 2004-11-04 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 分岐目標を予測する方法、プロセッサ、及びコンパイラ |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4763245A (en) * | 1985-10-30 | 1988-08-09 | International Business Machines Corporation | Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table |
US5333283A (en) * | 1991-10-29 | 1994-07-26 | International Business Machines Corporation | Case block table for predicting the outcome of blocks of conditional branches having a common operand |
JP2000132390A (ja) * | 1998-10-23 | 2000-05-12 | Toshiba Corp | プロセッサ及び分岐予測器 |
US20030131345A1 (en) * | 2002-01-09 | 2003-07-10 | Chris Wilkerson | Employing value prediction with the compiler |
US20070088937A1 (en) * | 2005-10-13 | 2007-04-19 | International Business Machines Corporation | Computer-implemented method and processing unit for predicting branch target addresses |
US7444501B2 (en) * | 2006-11-28 | 2008-10-28 | Qualcomm Incorporated | Methods and apparatus for recognizing a subroutine call |
US7870371B2 (en) * | 2007-12-17 | 2011-01-11 | Microsoft Corporation | Target-frequency based indirect jump prediction for high-performance processors |
-
2010
- 2010-05-19 US US13/001,852 patent/US8694760B2/en active Active
- 2010-05-19 JP JP2011514333A patent/JP5347023B2/ja not_active Expired - Fee Related
- 2010-05-19 CN CN2010800021370A patent/CN102099781A/zh active Pending
- 2010-05-19 WO PCT/JP2010/003357 patent/WO2010134330A1/ja active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004533695A (ja) * | 2001-06-29 | 2004-11-04 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 分岐目標を予測する方法、プロセッサ、及びコンパイラ |
Non-Patent Citations (2)
Title |
---|
AMIR ROTH ET AL.: "Improving virtual function call target prediction via dependence-based pre-computation", 《PROCEEDING OF THE 13TH INTERNATIONAL CONFERENCE ON SUPERCOMPUTING,ACM》, 31 December 1999 (1999-12-31), pages 356 - 364 * |
TAKASHI TOYOSHIMA ET AL.: "Register Indirect Jump Target Forwarding", 《SYMPOSIUM ON ADVANCED COMPUTING SYSTEMS AND INFRASTRUCTURES SACSIS2006 RONBUNSHU》, vol. 2006, no. 5, 22 May 2006 (2006-05-22) * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107925690A (zh) * | 2015-09-30 | 2018-04-17 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN107925690B (zh) * | 2015-09-30 | 2021-07-13 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN105718241A (zh) * | 2016-01-18 | 2016-06-29 | 北京时代民芯科技有限公司 | 一种基于sparc v8体系结构的分类式混合分支预测系统 |
CN105718241B (zh) * | 2016-01-18 | 2018-03-13 | 北京时代民芯科技有限公司 | 一种基于sparc v8体系结构的分类式混合分支预测系统 |
CN106648636A (zh) * | 2016-12-08 | 2017-05-10 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测系统及方法 |
CN106648636B (zh) * | 2016-12-08 | 2020-01-03 | 北京航空航天大学 | 一种基于图挖掘的软件函数变更预测系统及方法 |
CN108897699A (zh) * | 2018-07-03 | 2018-11-27 | 中国人民解放军国防科技大学 | 一种基于函数调用栈的数据预取方法和装置 |
CN109240815A (zh) * | 2018-08-24 | 2019-01-18 | 珠海格力电器股份有限公司 | 一种共享堆栈的多任务运行方法、装置及设备 |
CN109240815B (zh) * | 2018-08-24 | 2021-07-23 | 珠海格力电器股份有限公司 | 一种共享堆栈的多任务运行方法、装置及设备 |
CN111176729A (zh) * | 2018-11-13 | 2020-05-19 | 深圳市中兴微电子技术有限公司 | 一种信息处理方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US8694760B2 (en) | 2014-04-08 |
JPWO2010134330A1 (ja) | 2012-11-08 |
WO2010134330A1 (ja) | 2010-11-25 |
JP5347023B2 (ja) | 2013-11-20 |
US20110119472A1 (en) | 2011-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102099781A (zh) | 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 | |
Ehlers et al. | Slugs: Extensible gr (1) synthesis | |
CN110059009B (zh) | 用于测试代码文件的方法和装置 | |
Li et al. | SymJS: automatic symbolic testing of JavaScript web applications | |
US5768592A (en) | Method and apparatus for managing profile data | |
CN104969179B (zh) | 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统 | |
US8381194B2 (en) | Methods and apparatuses for selective code coverage | |
US20020066081A1 (en) | Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator | |
US8943487B2 (en) | Optimizing libraries for validating C++ programs using symbolic execution | |
KR101081090B1 (ko) | 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화 | |
US9582403B2 (en) | Testing of combined code changesets in a software product | |
US8250551B2 (en) | Refining tail call optimizations at link-time | |
JPH09330233A (ja) | 最適目的コード生成方法 | |
US8413240B2 (en) | Information processing device, information processing method, and computer readable recording medium | |
CN104246695A (zh) | 嵌套仿真和动态链接环境 | |
CN102099786A (zh) | 程序优化方法 | |
JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
US20120192162A1 (en) | Optimizing Handlers for Application-Specific Operations for Validating C++ Programs Using Symbolic Execution | |
CN106055343B (zh) | 一种基于程序演进模型的目标代码逆向工程系统 | |
US6301652B1 (en) | Instruction cache alignment mechanism for branch targets based on predicted execution frequencies | |
CN106462432A (zh) | 数据相关控制流简化 | |
JP2004362216A (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 | |
CN102193777B (zh) | 循环控制流转移 | |
CN102566977A (zh) | 字节码分支处理器及方法 | |
US20050149912A1 (en) | Dynamic online optimizer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110615 |