用于在动态运行时系统中恢复数据值的方法和装置的制作方法

文档序号:6487295阅读:108来源:国知局
专利名称:用于在动态运行时系统中恢复数据值的方法和装置的制作方法
技术领域
本发明一般涉及编译器和调试器,更具体地,涉及动态运行时系统中的数据值恢复。
背景技术
加快程序的执行速度一直是动态运行时系统(DRS,dynamic runtime system)的一个目标,这里的动态运行时系统例如是动态二进制转换系统和优化后程序的调试系统。为了实现这一目标,DRS通常采用积极的优化技术,例如全局优化,以及指令的重排序、插入和删除。这些优化技术可以来回移动指令,以取得更高的执行速度。结果,优化后指令的执行顺序可能与优化前指令的执行顺序不同。例如,在优化前指令A在指令B之前执行;但是在优化后指令A可能在指令B后执行。由优化引起的不同执行顺序可能在某些例外点上恢复一些变量的原始预期数据值(优化前的)时造成一些问题。换言之,在某一例外点上,变量的实际值可能不是该变量的原始预期值。这样的问题可能因程序中的分支而变得更加复杂。执行顺序可能因对二元分支的一边的优化而改变,但是对于另一边却不是这样的。所有变量的数据值可以被正确地确定为原始预期值的例外点被称为精确例外。获得精确例外是很重要的,从而可以正确地识别出引发例外的错误(bug)。精确例外通常可以通过在执行时引向例外点的执行路径的信息而获得。类似地,在调试过程中在每个中断点上恢复数据的预期值也是很重要的。
确定执行路径的一种方案就是装备每个块(一组代码)在每次执行该块时扣下一个时间戳,如D.M.Dhamdhere和K.V.Sankaranarayanan在“Dynamic Currency Determination inOptimized Programs(优化后程序中的动态当前值确定)”中提出的那样,上述文献公开在计算机器协会(ACM)有关程序设计语言和系统的学报,第20卷,1998,第1111-30页中。程序可以根据分支指令被划分成若干块。然而,该方案会导致优化后程序10-20%的速度减慢。另一种方案就是沿着执行边缘的子集递增一个寄存器,以编码当前执行路径,如T.Ball和J.Larus在“Efficient Path Profiling(高效路径统计)”中描述的那样,上述文献公开在第29届IEEE/ACM国际微体系结构讨论会,1996的论文集中。然而,该方案是用于静态路径统计,并且可能使优化后程序减慢约40%。因此需要一种新的方案,该方案不会招致过多的开销,并且可以动态地统计执行路径,以确保数据值恢复。


根据以下对本发明的详细描述将会清楚本发明的特征和优点,在附图中图1根据本发明的实施方案描绘了使用数据恢复机制(mechanism)的示例性动态运行时系统的高级框架;图2(a)-(b)的示意图示出了断言(predicate)寄存器如何可以帮助恢复受优化影响的变量的预期值;图3是根据本发明的实施方案,在动态运行时系统中执行数据值恢复方法的过程的示例性流程图;图4是根据本发明实施方案的优化时数据恢复机制和执行时数据恢复机制的高级功能框图;图5(a)-(b)是模糊和精确断言寄存器分配对数据值恢复的不同影响的示意图;图6(a)-(b)是根据本发明的实施方案示出了如何为程序的优化后区域计算一个块到达(reach)、多重到达(m-reach)以及扩展多重到达(em-reach)的集合的示意图;图7是根据本发明的实施方案图示了如何计算不同代码块之间的可到达性(reachability)关系,以实现精确断言寄存器分配的示例性伪码;图8是根据本发明的实施方案使用不同块之间的可到达性信息来修改用于不同块的虚拟断言寄存器的干扰图的示例性图示;图9是根据本发明的实施方案提炼程序的优化后区域的程序流图用于精确断言寄存器分配的示例性图示;图10是带循环的程序流图的示意图;图11是根据本发明的实施方案图示了如何循环地使用多个寄存器字来记录程序中的优化循环区域的执行路径的示例性伪码;图12是根据本发明的实施方案确定引向例外点的执行路径,以在执行时进行数据值恢复的示例性图示;以及图13是根据本发明的实施方案在编译时期间准备好数据值进行恢复,并且在执行时期间实际恢复数据值的过程的示例性图示。
具体实施例方式
本发明的实施方案是一种用于在诸如动态二进制转换系统和优化后程序的调试系统的动态运行时系统(DRS)中,使能在例外/中断点上的数据值恢复的方法和装置。本发明可被用于动态地统计优化后程序在运行时的执行路径,而不会使优化后程序的执行速度有大幅下降。精确断言寄存器分配技术可被用来确保对于带分支的程序而言,执行路径是可确定的。为了精确地分配断言寄存器,程序可以基于分支指令被表示为多个代码块。具有一个以上后继块的块被称为分支块。分支块可以随后被识别出来,并且可以对涉及优化和分支块的区域进行修剪,以供进一步处理。对于所述区域可以计算出不同块之间的关系,并将其用于精确断言寄存器分配的目的。这些关系可以用有关一个块如何到达其他块的信息来表示。基于不同块之间的关系,可以为所述区域生成并扩充干扰图。可以依赖干扰图将断言寄存器精确地分配给不同的分支块。当在执行期间或者在调试期间的某个中断点上发生例外时,可以基于被精确分配给分支块的断言寄存器的值来确定引向例外/中断点的执行路径。这样一来,基于所确定的执行路径连同优化注解,就可以恢复非当前(non-current)数据和非常驻(non-resident)数据的值。
在本发明中提及“一个实施方案”或“实施方案”是指关于该实施方案所描述的具体特征、结构或特性被包括在本发明的至少一个实施方案中。因此,短语“在一个实施方案中”在整篇说明书不同地方的出现不一定全是指同一实施方案。
图1根据本发明的实施方案描绘了使用数据恢复机制的示例性动态运行时系统的高级框架。动态运行时系统包括的组件可以被大致分成两个类别,即编译时组件110和执行时组件150。编译时组件包括两个组件优化机制120和优化时数据恢复机制130。优化机制接受输入程序105并对该程序进行优化(例如,指令重排序、插入和删除等)。另外,优化机制可以包括优化注解组件,用以注解所完成的优化。优化注解记录优化机制对输入程序做了哪些事情,例如,有关指令被移动到何处的信息。优化注解对于例外/中断点上的数据值恢复可以是有帮助的。优化机制将带有优化信息的程序125传递到优化时数据恢复机制。注意,优化时数据恢复机制在优化期间与优化机制一起工作。优化时数据恢复机制使用优化信息来记录通过精确断言寄存器分配的数据流。优化时组件的输出程序135包含在执行时期间在例外/中断点上恢复数据值的必要信息,例如分配给分支块的断言寄存器和值。
动态运行时系统的执行时组件150包括执行时数据恢复机制140。执行时数据恢复机制接受来自优化时组件的输出程序135。基于断言寄存器的值,执行时数据恢复机制可以确定引向例外/中断点的执行路径。执行时数据恢复机制还可以使用所确定的执行路径以及包含在优化注解中的信息在例外/中断点上恢复数据的预期值。
图2(a)-(b)的示意图示出了断言(predicate)寄存器如何可以帮助恢复受优化影响的变量的预期值。图2(a)代表一个程序在优化前的块流程图。在该程序中有五个块(B1-5),其中B1是两路分支块。B1具有两个后继块B2和B3。断言寄存器P的值决定了在B1之后将执行哪一个后继块。断言寄存器P可以只有两个值1或0。如果断言寄存器P的值是1,则在B1后执行B2;否则,在B1后执行B3。X是该程序中的一个变量,它的值在B1、B2和B4中改变。如果执行路径是B1→B2→B4,则B4中的指令(X=10)将重复B2中的相同指令。一般情况下,优化方法可被用来将B4中的指令(X=10)移动到B3,如图2(b)所示。如果执行路径B1→B2→B4是最常采用的路径,那么这样一种优化可以提高执行速度。此外,无论采用哪条路径,如果在B5前没有发生例外的话,优化都不会影响变量X的最终结果。
然而,如果在优化后程序的B4中,在指令LOAD P处发生了例外,那么对于两条可能的执行路径而言,X的预期值将会不同(对于两条可能的路径,X的实际值将是一样的(=10))。如果采用了路径B1→B2→B4,那么在例外点上X的实际值和预期值都将是10,不需要为X恢复预期值。如果采用了路径B1→B3→B4,那么X的实际值将是10,而在例外点上X的预期值将是0。因而,当采用路径B1→B3→B4时,有必要在例外点上为X恢复预期值。因此,断言寄存器P可被用来帮助确定执行路径,以恢复变量X的预期值。利用断言寄存器P的值连同优化注解信息,就可以在采用路径B1→B3→B4的情况下,在例外点上恢复X的预期值。类似地,如果优化后程序的调试系统在B4中的指令LOAD P处中断,那么该调试系统可以利用同样的信息,即断言寄存器P的值和优化注解来恢复X的预期值。
图3是根据本发明的实施方案,在动态运行时系统中执行数据值恢复方法的过程的示例性流程图。在步骤310处可以接收到输入程序。输入程序可以在步骤320处被优化。在步骤320处施行的优化可以包括指令的重排序、删除或插入。在步骤330处,在步骤320处完成的优化被注解。所述注解可以记录指令在优化前和优化后的位置。这样的注解可被用于在例外/中断点上的数据值恢复。在步骤340处,断言寄存器被分配给分支块,从而可以精确地记录优化后程序的执行路径。步骤310-340在编译时期间执行。步骤320、330和340可以同时执行,或者以不同于图3中所示的顺序来执行,以取得相似的结果。基于断言寄存器值,可以在步骤350处确定优化后程序的执行路径。在步骤360处,可以基于所确定的执行路径以及优化后程序的优化注解来恢复预期数据值。
图4是根据本发明实施方案的优化时数据恢复机制和执行时数据恢复机制的高级功能框图。为方便起见,以下说明仅描述例外点上的数据值恢复。注意,同样的方法和系统可以容易地用于或扩展到调试系统中在中断点上的数据值恢复。优化时数据恢复机制包括八个主要组件流图生成器410、例外点和前导块识别器415、流图提炼机制420、分支块识别器425、可到达性配置机制430、干扰图生成和扩充机制435、断言寄存器分配机制440和循环处理机制445。
流图生成器410(如图4所示)从优化机制120(如图1所示)接受带有优化信息125的程序。流图生成器分析程序的结构并生成程序的初始流图。可以为程序的每个优化后区域生成一个初始流图。在不被优化的程序区域中没有必要恢复数据值。基于流图生成器生成的优化后区域的初始流图,例外点和前导块识别器415识别该优化后区域的例外点,这里假设只有例外点需要数据值恢复。每个识别出的例外点可以定义一个前导块,该前导块主管对例外点进行数据值恢复所需的所有块。例外点和前导块识别器也为每个例外点识别一个前导块。
在为优化后区域识别例外点和前导块之后,流图提炼机制420(如图4所示)提炼流图生成器410所生成的优化后区域的初始流图。流图提炼机制修剪初始流图,以便只包括数据值恢复所必需的区域。该区域包含识别出的例外点和前导块,这些对于确定引向需要数据值恢复的例外点的执行路径来说是非常重要的。在图9中图示了提炼优化后区域的初始流图的过程,后面将进行描述。在提炼出优化后区域后,分支块识别器425识别优化后区域中的分支块。
为了确定执行路径,有必要精确地记录在每个分支块后采用哪条后继路径。断言寄存器通常在计算体系结构(例如Intel公司的ItaniumTM体系结构)中被用来保护分支指令。一个块的分支条件为TRUE(或FALSE)意味着分支指令的保护断言寄存器的值为1(或0)。如果每个分支块使用唯一的断言寄存器来保护其分支指令,并且断言寄存器对于例外点而言是全新的(live)(不是重复使用的),那么可以通过检查所有分支块的断言寄存器在例外点之前的值来确定执行路径。因此,由于断言寄存器的重复使用可能引起断言寄存器所携带的有关分支块的执行路径信息在到达例外点之前被覆写,所以不可以重复使用用于分支块的断言寄存器。一般情况下,首先将一个虚拟断言寄存器指派给一个分支块,然后利用断言寄存器分配算法将虚拟断言寄存器映射到物理断言寄存器。由于物理断言寄存器的数量是有限的,因此断言寄存器分配算法在可能的情况下可以尽量重复使用物理断言寄存器。由物理断言寄存器中的值不能唯一确定执行路径的断言寄存器分配被称为模糊断言寄存器分配;其他情况的断言寄存器分配被称为精确断言寄存器分配。
图5(a)-(b)是模糊和精确断言寄存器分配对数据值恢复的不同影响的示意图。图5(a)示出了模糊断言寄存器分配的实施例,其中断言寄存器分配算法将同一物理断言寄存器P分配给两个分支块B1和B4。在该实施例中,当执行到达B7时,在断言寄存器P中携带的从B1到B4的执行路径信息丢失了。换言之,基于断言寄存器P的值不可能确定在B1之后执行了哪一个块(B2或B3)。图5(b)示出了精确断言寄存器分配的实施例,其中断言寄存器分配算法为两个分支块B1和B4分别分配两个不同的断言寄存器P1和P2。在该实施例中,基于断言寄存器P1和P2四种可能的值组合可以唯一地确定B7之前所有可能的四条执行路径(即,B1→B2→B4→B5→B7,B1→B2→B4→B6→B7,B1→B3→B4→B5→B7,B1→B3→B4→B6→B7)。
实现精确断言寄存器分配的一种方法就是为每一个分支块分配唯一的物理断言寄存器,并且保证所有已分配的物理断言寄存器对于所有潜在的例外点都是全新的。该方法一般情况下都是精确的。然而,该方法可能不必要地使用比可获得的数量更多的物理断言寄存器。该方法还可能引起更多的寄存器溢出和重加载,这可能会减慢程序执行。与此,需要一种更复杂的精确断言寄存器分配算法。本发明公开了一种方法,其使用在程序的优化后区域中的各块之间的多重可到达性(multi-reachability,m-reach)关系来精确地确定哪些虚拟断言寄存器可以被映射到不同的物理断言寄存器。为方便起见,以下描述使用两路分支块作为例子,并且集中讨论具有单个入口块的优化后区域。注意,本领域的技术人员可以将本发明扩展到具有多路块和/或多入口优化后区域的情况中。
为了开始描述如何计算块之间的m-reach关系,首先考虑一个程序的流图的直接非循环图解(DAG)区域。DAG区域是不具有任何循环的区域。此外,只有在一个两路分支块的两个后继块都处在要计算m-reach关系的区域中时,该块才被认为是一个分支块。如果该块的一个后继块在所述区域之外,那么引向例外点的执行路径一定是跟在所述区域内的后继块之后到达例外点的。因此,对于这样一个块,没必要具有唯一的物理断言寄存器。
当且仅当从块A到另一个块B存在一条以上可能的执行路径时,块A才是多重到达块B的。例如,在图5(a)中,块B1多重到达块B4和B7,并且块B4多重到达块B7;但是块B2不多重到达块B4、B5或B6。在入口块到达区域内的每个块的树状区域中,因为从一个块到任何其他块最多只有一条执行路径,所以不存在被任何其他块多重到达的块。如果一个分支块C没有多重到达分支块D,那么即使块C到达块D,相同的物理断言寄存器也可以用于保护两个块C和D。这是因为块C只可以沿着一条执行路径到达块D,因而对于块C而言,没有必要保留物理断言寄存器的值。换言之,用于块C的物理断言寄存器可以被其他块,例如块D重复使用。因此,在树状区域中,不需要精确断言寄存器分配算法。另一方面,如果块C多重到达块D,那么用于这两个块的同一物理断言寄存器不会导致在块D之后某一点上的精确执行路径确定。例如,在图5(b)中,如果块B1和B4使用同一物理断言寄存器P,那么在块B5、B6或B7中,在任何例外点上要想确定精确执行路径都是不可能的。
为了实现精确断言寄存器分配,必须为m-reach集合不为空的每个块识别出一个扩展多重到达(em-reach)集合。用于块A的em-reach集合包括位于从A到A的多重到达块之一的路径上的所有块,包括A的多重到达块。如果块A多重到达块B,那么块A需要一个与用于A的em-reach集合中各块的所有物理断言寄存器都不同的物理寄存器,以便保持A的断言寄存器对于块B无论如何都是全新的。对于块A,块A到达、多重到达、以及扩展多重到达的集合可以被分别表示为R(A)、M(A)和EM(A)。通过以逆向拓扑顺序遍历DAG区域两次,就可以计算出R(A)、M(A)和EM(A)。在第一次遍历中,如下计算出R(A)和M(A)R(A)={A}∪∪S∈succ(A)R(S)]]> 其中succ(A)是块A的后继块的集合;(∪S1,S2∈succS1≠S2(R(S1)∩R(S2)))]]>代表出现在一个以上R(S)中的块,并且当块A只有两个后继块S1和S2时,其等效于R(S1)∩R(S2)。
图6(a)是示出如何使用以上公式为程序的优化后区域计算一个块到达以及多重到达的集合的示意图。例如,由于块B5到达B7和B8,并且块B6到达B8和B9,因此R(B5)={B5,B7,B8},R(B6)={B6,B8,B9},并且M(B5)和M(B6)两者都为空。因此,基于以上公式,R(B3)={B3,B5,B6,B7,B8,B9},并且M(B3)={B8}。
在第二次遍历中,基于流图中块的reach和m-reach集合来计算一个块扩展多重到达的块集合。图6(b)是示出基于程序的优化后区域中各块的reach和m-reach集合如何计算一个块扩展多重到达的集合的示意图。em-reach集合的计算开始于其他块以逆向拓扑顺序多重到达的块。无论何时一个块被遍历,该块都被添加到它自己的em-reach集合中。使用图6(b)为实施例,首先计算块B7和B8的em-reach集合EM(B7)={B7},EM(B8)={B8}。当处理块B5时,B5的em-reach集合是EM(B5)={B5}∪EM(B7)∪EM(B8)={B5,B7,B8)类似地,EM(B3)={B3}∪EM(B5)∪EM(B6)={B3,B5,B6,B7,B8)。
注意,B9不在EM(B3)中,因为B9不在B3和B3多重到达的块(B7和B8)之间的任何一条路径上。
图7是根据本发明的实施方案图示了如何计算不同代码块之间的可到达性关系,以实现精确断言寄存器分配的示例性伪码。图7也是如何为程序的优化后区域中的块如上所述地计算出reach、m-reach和em-reach集合的实现方式图示。步骤705到755示出了在第一次遍历中如何计算出每个块的reach和m-reach集合,步骤760-785示出了在第二次遍历中如何计算出相关块的em-reach集合。注意,B->R、B->M和B->EM分别代表块B的reach、m-reach和em-reach集合。另外注意,图7只考虑了两路分支块,对本领域的技术人员显而易见的是,可以将该方法扩展到存在多路分支块的情况中。
回去参考图4,可到达性配置机制430计算在流图提炼机制420为程序的优化后区域产生的提炼流图中的块的reach、m-reach和em-reach集合。可到达性配置机制计算出的m-reach信息可以被进一步用于精确地将有限数量的物理寄存器分配给提炼流图中的分支块。
干扰图生成和扩充机制435(如图4所示)可以包括初始干扰图生成组件,用以基于在不同块中使用的虚拟断言寄存器的生命期来生成初始干扰图。变量x的生命期是变量x存活的(live)时间段。如果在程序中的某一特定点(指令或语句)上变量x持有将来可能需要的值,则该变量x是存活的。这里对于存活分析而言,虚拟断言寄存器可被认为是正常变量。如果变量x和y不是在程序的相同时段内存活,那么这两个变量不相互干扰;换言之,如果变量x的生命期与变量y的生命期重叠,则x与y相互干扰。干扰图代表了不同变量的生命期如何相互重叠。如果在变量x和y的生命期之间存在重叠,则在干扰图中在x和y之间存在干扰边。生命期和干扰图是计算机编译器系统中的常用概念。
干扰图生成和扩充机制435还可以包括干扰图修改组件,用以利用程序的优化后区域中各块的m-reach信息来扩充基于在不同块中使用的虚拟断言寄存器的生命期而生成的初始干扰图。在一个实施方案中,m-reach信息可被用来向初始干扰图添加附加的干扰边。例如,假设vp1是保护分支块B1中的条件分支指令的虚拟断言寄存器,并且vp2,vp3,...vpk是用在块B2(无论B2是不是分支块)中的虚拟断言寄存器。如果块B1扩展多重到达块B2,那么新的干扰边(vp1,vpi),i=2,...,k可以被加入初始干扰图。在图8中图示了基于程序的优化后区域中各块的m-reach信息,向初始干扰图加入附加的干扰边的示例性实现。
图9是根据本发明的实施方案提炼程序的优化后区域的程序流图,以进行精确断言寄存器分配的示例性图示。在步骤905,为程序的优化后区域提炼出的一个块集合可以被置空。步骤910为例外点和前导块识别器415(如图4中所示)识别出的每一个例外点开始迭代过程。在步骤920,由例外点和前导块识别器415为例外点识别出一个前导块。在步骤930,可以获得一个封面集合,该集合包括从识别出的前导块可以到达的并且到达例外点的块。在步骤940,通过将封面集合混合到提炼集合自身中去,可以对提炼集合进行更新。在步骤950,提炼的块集合可以被流图提炼机制420用来提炼由流图生成器410生成的初始流图。此外,提炼的块集合可被分支块识别器425用于识别分支块,被可到达性配置机制430用于计算块之间的m-reach关系,并且被干扰图生成和扩充机制435用于扩充初始干扰图。
回去再次参考图4,基于干扰图生成和扩充机制435产生的扩充后干扰图,断言寄存器分配机制440可以将物理断言寄存器映射到扩充后干扰图中的虚拟断言寄存器。在映射过程中,不同的物理寄存器被映射到扩充后干扰图中的那些虚拟断言寄存器,使得在两者之间存在干扰边的任何两个虚拟断言寄存器都不能被映射到相同的物理断言寄存器。这样一来,就可以实现精确的物理断言寄存器分配。
以上描述仅仅处理了DAG区域。当如图10所示在程序的优化后区域中存在循环时,用于DAG区域的精确断言寄存器分配方法可能不会为循环区域产生精确的物理断言寄存器。用于循环区域的执行路径可以包含一个循环体的不同数量的迭代。假设循环体是一个DAG区域。只有在执行路径包含循环体的单次迭代时,上面针对DAG区域描述的精确断言寄存器分配方法才可以被用来确定精确的执行路径。然而,当执行路径包含循环体的多次迭代时,分配给循环体的物理断言寄存器只能反映用于该循环体最近一次迭代的执行路径部分。用于循环体的早先迭代的执行路径无法被确定。实际上,循环体在例外之前的迭代数量无法容易地确定。因此,用于DAG区域的精确断言寄存器分配方法不能够被用来在循环区域的例外点上精确地恢复数据值。
为了支持对循环区域的精确数据值恢复,有必要知道早先迭代的断言寄存器值。一种方法就是在循环体的每次执行末端,使用断言字来保存断言寄存器的值(例如,对于64个断言寄存器使用一个64位字)。基于例外点和保存的断言字,就可以精确地确定一条完整的执行路径。然而,该方法对于迭代多次的循环而言不那么有效,这是因为断言字所需的存储量可能是非常大的。
实际当中,很多优化只是在有限数量的循环迭代上移动指令。例如,在具有K级的软件流水线化循环中,一条指令在反向循环边上将向前移动不超过K次迭代。当优化过程将一条指令仅向前移动K次迭代时,只有多达K次先前迭代的执行路径历史可能与数据值恢复有关。因此,可以循环使用K个寄存器r[i],i=1,...,K为循环体的K次迭代保存断言字。在一个实施方案中,在进入循环之前,可以用一个特殊值来初始化r[1],该值指示r[1]不是一个有效的断言字。在循环体的执行期间,K个寄存器被旋转,使得r[i+1]=r[i],i=k-1,...,1。当执行循环中的最后一块时,当前断言字被移动到r[1]中。由于旋转操作与循环执行无关,所以旋转操作的执行不会招致任何开销。旋转操作也可以由硬件电路自动完成,例如使用旋转寄存器用于还未用尽所有旋转寄存器的循环。
图11是根据本发明的实施方案图示了如何循环地使用多个寄存器字来记录程序中的优化循环区域的执行路径的示例性伪码。在步骤1105,可以根据数据值恢复所必需的循环迭代的数量来设置断言字的数量(K)。在步骤1110,可以作出以下判断是否可以独立地(即,不招致执行开销)完成寄存器字的旋转操作(即,r[i+1]=r[i],i=K-1,...,1)。如果可以独立地完成旋转操作,那么K个通用寄存器(即,r[1],r[2],...,r[K])可被用作断言字(在步骤1115)。在步骤1120,K个通用寄存器的旋转操作可被设置为独立运行。在步骤1125,用于刚执行的循环体的当前断言字可以被插入第一通用寄存器(即,r[1])。如果在步骤1110处的判断结果是旋转操作无法独立地进行,那么在步骤1130处可以将K个旋转寄存器用作断言字。在步骤1135,用于刚执行的循环体的当前断言字可以被插入第一旋转寄存器。在步骤1140,对于K个旋转寄存器可以初始化旋转基,并且可以对循环分支进行修改,使得硬件电路可以开始自动旋转操作。在步骤1145,被用作断言字的第一寄存器可以用INVALID STATE来初始化,以指示该第一寄存器在进入循环之前不是有效的断言字。
当在程序的优化后区域中存在循环时,如图9所示的用于提炼程序流图并且进一步扩充程序的DAG区域的干扰图的方法可能需要进行修改。在循环区域中,循环尾块(具有循环分支指令的块)应当被包括在最后的提炼后流图中。
再次参考图4,循环处理机制445可以使用旋转断言字来处理程序的优化循环区域。循环处理机制将断言寄存器分配机制440所使用的用于DAG区域的精确断言寄存器分配方法扩展为适于循环区域,以确保对循环区域的精确执行路径确定。
如图1所示的执行时数据恢复机制140包括两个主要组件执行路径确定机制450和数据值确定机制445(两个组件都示出在图4中)。执行路径确定机制基于保护程序的优化后区域中的分支块的物理断言寄存器来确定引向例外点的执行路径。基于所确定的引向例外点的执行路径,数据值确定机制可以沿着该执行路径反向追踪,以恢复非当前数据和非常驻数据的预期值。在恢复预期数据值时,数据值确定机制还可以在一些环境下利用优化注解信息,例如,一种优化方法只在块内移动指令。
图12是根据本发明的实施方案,确定引向例外点的执行路径,以在执行时进行数据值恢复的示例性图示。假设将在程序的优化后区域中确定引向例外点的执行路径。在步骤1205,用于例外块的前导块(其中例外被定位)可以被设置为当前块(B)。当前块有可能变成引向例外块的执行路径中的第一块。在步骤1210,可以检查循环条件,即当前块是否有效并且与例外块不同。如果该循环条件满足,则可以执行循环体(即,步骤1215到1260)。在步骤1215,当前块可以被加入引向例外块的执行路径。
在步骤1210,可以对当前块进行检查,以发现它是否为一个分支块。如果当前块不是一个分支块,则当前块在优化后区域中的后继块可以变为新的当前块(在步骤1225);并且在步骤1230,可以退出循环体,并且再次执行步骤1210,以用新的当前块开始另一次循环。如果当前块是一个分支块,那么随后可以在步骤1235处针对例外块来检查当前块。如果当前块(分支块)没有多重到达例外块,则当前分支块的到达例外块的后继块可以成为新的当前块(在步骤1240),并且在步骤1245,可以退出循环体,并且可以再次执行步骤1210,以用新的当前块开始另一次循环。
如果当前块是一个分支块并且的确多重到达例外块,那么可以在步骤1250处对当前分支块的保护断言寄存器的值进行检查。如果断言寄存器值等于1,那么当前分支块在优化后区域中的真(true)后继块可以成为新的当前块(在步骤1255);否则,当前分支块在优化后区域中的假(false)后继块可以变为新的当前块(在步骤1260)。此后,可以在步骤1210处以新的当前块再次开始另一次循环执行。循环体可以一直迭代,直到不能满足循环条件1210为止。
最后,图13根据本发明的实施方案示出了在编译时期间准备好数据值进行恢复,并且在执行时期间实际恢复数据值的过程的示例性图示。步骤1305到1370在编译时完成,而步骤1380和1390在执行时完成。在步骤1305,可以对循环条件进行检查。循环条件是用于将要优化的每个可能的候选区域的迭代处理。
在步骤1310,可以进行优化,并且可以采取措施来确保在可能的执行点(possibleexecution points)上的数据值基于精确断言寄存器分配和优化注解是可恢复的。如果优化导致数据值即便用精确寄存器分配和优化注解也无法恢复,那么将不进行优化。在步骤1320,可以生成优化后区域的流图。该流图可以包括大致的代码块以及这些块之间的关系。在步骤1330,对于优化的候选区域可以识别例外点、对应于每个例外块的前导块、以及分支块。在识别分支块之前,可以基于识别出的例外点及其相应的前导块来修剪优化后区域。在步骤1340,可以基于识别出的例外点、前导块和分支块来提炼优化后区域的流图。提炼出的流图只包括在识别出的例外点上进行数据值恢复所必需的块。提炼过程也可以在更靠后的阶段来完成。在步骤1350,可以计算在提炼出的流图中各块之间的m-reach关系(即,reach、m-reach和em-reach集合)。
在步骤1360,可以在DAG区域中进行精确断言寄存器分配。如果一个区域包含循环,那么该区域可以被划分成若干独立的子区域,每个子区域只有一个其循环体为DAG区域的循环。在步骤470,可以执行特殊的处理来处置循环区域。特殊处理可以包括插入断言字的保存和旋转指令,使得用于多次循环体迭代的断言寄存器值可以被保存并稍后用于数据值恢复。在执行时,可以在步骤1380基于在编译时期间所精确分配的断言寄存器的值来确定引向例外点的执行路径。在步骤1390,可以使用所确定的执行路径以及优化注解来恢复非当前数据和非常驻数据的值。
虽然参考图1-13中的框图和流程图以及伪码描述了本发明的示例性实施方案,但是本领域的普通技术人员将容易明白,可以替换性地使用很多其他实现本发明的方法。例如,可以改变流程图中的框或者伪码中的步骤的执行顺序,和/或可以改变、删除或合并框图/流程图中的部分框以及伪码中的步骤。
在前面的描述中,已经描述了本发明的各个方面。出于解释的目的,阐述了很多具体的数字、系统和配置,以提供对本发明的完整理解。然而,获知本发明公开内容的本领域的技术人员将清楚,没有这些具体的细节也可以实现本发明。此外,公知的特征、组件或模块被省略、简化、合并或分割,以免迷糊了本发明。
本发明的实施方案可以在任何计算平台上实现,所述计算平台包括硬件和操作系统。
如果用软件实现本发明的实施方案,那么软件可以被存储在通用或专用可编程处理系统可读的存储介质或设备(例如硬盘驱动器、软盘驱动器、只读存储器(ROM)、CD-ROM设备、闪存器件、数字多用途盘(DVD)或其他存储设备)上,当该存储介质或设备由处理系统读取来完成这里所描述的过程时,所述软件配置并操作所述处理系统。本发明的实施方案也可以被考虑实现为机器可读存储介质,被配置来与处理系统一同使用,其中如此配置的存储介质使得处理系统以特定的和预定的方式来操作,以实现这里所描述的功能。
虽然参考图示的实施方案描述了本发明,但是本说明书不想被理解为限制性的。本发明所属领域的技术人员很清楚的对示例性实施方案的各种修改以及本发明的其他实施方案被认为落入本发明的精神和范围内。
权利要求
1.一种方法,包括接收程序;优化所述程序;以及使能在执行优化后程序时的数据值恢复。
2.如权利要求1所述的方法,还包括注解对所述程序完成的优化。
3.如权利要求1所述的方法,其中使能数据值恢复的操作包括在编译时精确地将断言寄存器分配给所述优化后程序中的分支块;以及在执行时基于所精确分配的断言寄存器的值和优化注解来恢复数据值。
4.如权利要求3所述的方法,其中恢复数据值的操作包括基于所精确分配的断言寄存器的值,确定所述优化后程序在执行时的执行路径。
5.一种恢复优化后程序中的数据值的方法,包括接收程序;识别所述程序要进行优化的区域;对所述区域进行优化;分析优化后的区域以便进行精确断言寄存器分配;以及对所述优化后的区域执行精确断言寄存器分配。
6.如权利要求5所述的方法,其中进行优化的操作包括注解优化。
7.如权利要求5所述的方法,还包括在执行时基于用于分支块的断言寄存器的值来确定所述优化后区域中的执行路径;以及在执行时基于所确定的执行路径和优化注解来恢复数据值。
8.如权利要求5所述的方法,其中分析优化后的区域的操作包括生成所述优化后区域的初始流图;识别恢复点和前导块;基于识别出的恢复点和前导块来提炼所述初始流图;以及为经过提炼的优化后区域识别分支块。
9.如权利要求8所述的方法,其中恢复点包括至少一个需要进行数据值恢复的点,前导块包括用于在所述恢复点上进行数据值恢复的主管块,并且分支块包括在所述优化后区域内部具有一个以上的后继块的块。
10.如权利要求5所述的方法,其中执行精确断言寄存器分配的操作包括向所述优化后区域的提炼后流图中的块指派虚拟断言寄存器;生成所述虚拟断言寄存器的初始干扰图;计算所述优化后区域中的各块之间的多重到达关系;基于计算出的各块之间的多重到达关系来扩充所述初始干扰图;以及对于所述优化后区域中的分支块,将物理断言寄存器映射到所述虚拟断言寄存器。
11.如权利要求10所述的方法,还包括使用断言字来保存所述物理断言寄存器的值,以处理所述优化后区域中的循环。
12.如权利要求10所述的方法,其中所述多重到达关系包括一个块到达、多重到达、以及扩展多重到达的块的集合。
13.一种动态运行时系统,包括接收程序并对该程序进行优化的优化机制;使能在执行时的数据值恢复的优化时数据恢复机制;以及在执行时恢复数据值的执行时数据恢复机制。
14.如权利要求13所述的动态运行时系统,其中所述优化机制包括对所进行的优化进行注解的注解组件。
15.如权利要求13所述的动态运行时系统,其中所述优化时数据恢复机制包括在编译时向所述优化后程序中的分支块精确地分配断言寄存器的断言寄存器分配机制。
16.如权利要求13所述的动态运行时系统,其中所述执行时数据恢复机制包括在执行时基于用于分支块的断言寄存器的值来确定优化后区域中的执行路径的执行路径确定机制。
17.一种用于恢复优化后程序中的数据值的系统,包括多个编译时数据恢复组件,所述组件提供信息以使能在执行时的数据值恢复;以及多个执行时数据恢复组件,所述组件基于由所述多个编译时数据恢复组件提供的信息来恢复数据值。
18.如权利要求17所述的系统,其中所述多个编译时数据恢复组件包括接收程序并且为所述程序的优化后区域生成初始流图的流图生成器;恢复点和前导块识别器,所述恢复点和前导块识别器基于所述初始流图识别需要数据值恢复的点、主管在恢复点进行数据值恢复的其他块的前导块、以及分支块;以及对所述程序的优化后区域执行精确断言寄存器分配的断言寄存器分配机制。
19.如权利要求17所述的系统,其中所述多个执行时数据恢复组件包括在执行时基于所精确分配的断言寄存器的值来确定优化后区域中的执行路径的执行路径确定机制;以及至少部分基于所确定的执行路径来恢复数据值的数据值确定机制。
20.如权利要求18所述的系统,还包括根据识别出的恢复点和前导块,基于所述优化后区域的初始流图产生提炼后流图的流图提炼机制;为所述程序的优化后区域识别分支块的分支块识别器;以及计算所述提炼后流图中的各块之间的多重到达关系的可到达性配置机制。
21.如权利要求20所述的系统,还包括基于在所述程序的优化后区域的提炼后流图中的各块之间的多重到达关系,为保护分支块的虚拟断言寄存器产生扩充干扰图的干扰图生成和扩充机制;基于所述扩充干扰图,将物理断言寄存器映射到用于分支块的虚拟断言寄存器的断言寄存器分配机制;以及如果在所述优化后区域中存在循环,则使用断言字来记录所述物理断言寄存器的值,以确保在执行时的精确执行路径确定的循环处理机制。
22.如权利要求21所述的系统,其中所述干扰图生成和扩充机制包括为保护所述优化后区域的提炼后流图中的分支块的虚拟断言寄存器生成初始干扰图的初始干扰图生成组件;以及基于所述可到达性关系修改所述初始干扰图的干扰图修改组件。
23.一种制品,包括其上存储有内容的机器可访问介质,其中当所述内容由处理器访问时,所述内容导致接收程序;优化所述程序;以及使能在执行优化后程序时的数据值恢复。
24.如权利要求23所述的制品,还包括用于注解对所述程序完成的优化的内容。
25.如权利要求23所述的制品,其中用于使能数据值恢复的内容包括用于以下操作的内容在编译时精确地将断言寄存器分配给所述优化后程序中的分支块;以及在执行时基于所精确分配的断言寄存器的值和优化注解来恢复数据值。
26.如权利要求25所述的制品,其中用于恢复数据值的内容包括用于基于所精确分配的断言寄存器的值,确定所述优化后程序在执行时的执行路径的内容。
27.一种制品,包括其上存储有内容的机器可访问介质,其中当所述内容由处理器访问时,所述内容通过以下操作来进行恢复优化后程序中的数据值接收程序;识别所述程序要进行优化的区域;对所述区域进行优化;分析优化后的区域以便进行精确断言寄存器分配;以及对所述优化后的区域执行精确断言寄存器分配。
28.如权利要求27所述的制品,其中用于进行优化的内容包括用于注解优化的内容。
29.如权利要求27所述的制品,还包括用于以下操作的内容在执行时基于用于分支块的断言寄存器的值来确定所述优化后区域中的执行路径;以及在执行时基于所确定的执行路径和优化注解来恢复数据值。
30.如权利要求27所述的制品,其中用于分析优化后区域的内容包括用于以下操作的内容生成所述优化后区域的初始流图;识别恢复点和前导块;基于识别出的恢复点和前导块来提炼所述初始流图;以及为经过提炼的优化后区域识别分支块。
31.如权利要求30所述的制品,其中恢复点包括至少一个需要进行数据值恢复的点,前导块包括用于在所述恢复点上进行数据值恢复的主管块,并且分支块包括在所述优化后区域内部具有一个以上的后继块的块。
32.如权利要求27所述的制品,其中用于执行精确断言寄存器分配的内容包括用于以下操作的内容向所述优化后区域的提炼后流图中的块指派虚拟断言寄存器;生成所述虚拟断言寄存器的初始干扰图;计算所述优化后区域中的各块之间的多重到达关系;基于计算出的各块之间的多重到达关系来扩充所述初始干扰图;以及对于所述优化后区域中的分支块,将物理断言寄存器映射到所述虚拟断言寄存器。
33.如权利要求32所述的制品,还包括用于使用断言字来保存所述物理断言寄存器的值,以处理所述优化后区域中的循环的内容。
34.如权利要求32所述的制品,其中所述多重到达关系包括一个块到达、多重到达、以及扩展多重到达的块的集合。
全文摘要
提供了一种通过在编译时分配断言寄存器来保护优化后程序中的分支指令,从而在优化后程序中进行数据值恢复的方案。在执行时,基于保护分支块的断言寄存器的值来确定引向恢复点的执行路径。根据所确定的执行路径可以在恢复点上恢复非当前数据和非驻留数据的值。优化注解也可以被用于数据值恢复。
文档编号G06F9/45GK1839372SQ200480017659
公开日2006年9月27日 申请日期2004年3月19日 优先权日2003年4月25日
发明者吴友峰 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1