基于代码复制超级块的程序执行优化方法

文档序号:6331868阅读:209来源:国知局
专利名称:基于代码复制超级块的程序执行优化方法
技术领域
本发明涉及的是一种计算机技术领域的方法,具体是一种二进制系统中的基于代 码复制超级块的程序执行优化方法。
背景技术
动态二进制翻译是虚拟执行技术中应用最为广泛的方法,是为遗留代码提供移植 可能性和提高软件的平台适应性的一种有效手段,它在不需要可执行程序的源代码的情况 下,可以动态地将源机器平台上的二进制程序经过转换,运行于其他目标机器平台上。对于 动态二进制翻译器自身而言,执行性能是一个非常重要的衡量指标。所谓执行性能是指,以 源程序在原架构下运行的效率为参照,其在动态二进制翻译器提供的运行环境下的效率损 失度越低,翻译器的执行性能越好。为了提高动态二进制翻译器的性能,动态翻译器采用很多原本在编译领域被广泛 采用的策略和方法,鉴于动态二进制翻译与编译技术相比缺少源代码资源的特性,所以也 发展出来了动态二进制领域所特有的优化技术和方法。其中被广泛采用的有超级块生成技 术、链接技术等。在动态二进制领域,因为没有源代码,对程序所进行的优化等所需要的大 部分信息都是通过程序的剖分信息来获取的。一般来说,在动态二进制领域,对源程序的翻译,执行,优化等操作都是以源程序 的基本块为单位进行的。所谓基本块,是指仅有一个入口,并且以跳转,返回等指令结束的 一组指令序列。程序从基本块的入口开始执行,然后,最终在基本块的出口跳出,并跳到另 外一个基本块的入口继续执行指令序列。程序的剖分信息的获取就是以基本块为单位进行 的,包括基本块的执行次数,跳转地址等等一系列信息。所谓超级块,根据已获取的剖分信 息,按一定的规则挑选指定的几个基本块序列重新组合,形成的更长的指令序列,用以提高 程序的性能。它除了比基本块长以外,还兼有多个出口的特性。剖分信息的分类,主要有如下三种1、基于基本块的信息收集,也就是基本块运行特性信息的收集,基本上局限于基 本块的运行次数,和跳转目标块等粗略信息。虽说它收集的信息较为粗略,但是,它给系统 的开销比较小,所以,它在性能要求比较高的动态的系统中应用的比较多。2、基于边的信息收集,S卩,以一个基本块以及随后的基本块组合而成的边为基本 的信息收集单位。基于边的信息收集比基于块的要丰富一些,也能更好的描述程序的行为 特征。但是,随之而来的也是对系统带来的开销也是比较大的。3、基于路径的信息收集。根据程序的控制流图进行,以单条执行路径为单位进行 信息收集。这样的信息收集方式可以最接近程序真实的描述程序的行为特征。但是,它所付 出的代价也是最大的.由于它庞大的系统开销,在动态二进制翻译器中,基本上不被采用.对于有中间语言的动态二进制翻译器来说,比如valgrind,UQDBT,构造超级块都 倾向于在自身定义的中间语言,利用程序收集的信息,结合特定的算法进行。然后,再集中 放到后端翻译成目标代码。一般的有中间语言的超级块构造方法流程如下
1)利用上所述的三种种类信息收集方法,对信息进行采集。一般来说,一个翻译好 的基本块对应有一个对象对它的信息进行维护。通过上述的三种方法收集的信息一般来说 是存放在各自的对象中。2)当满足一定的条件,比如达到阈值等,程序就会触发超级块的构造例程,因为有 中间语言,所以,程序就先把一个一个的源程序基本块经过一定的处理,比如跳转反转等, 按照一定的算法翻译成一个大的中间语言程序块,然后在翻译成一个大的目标程序块,也 就是超级块。3)最后就是程序跳到翻译好的目标程序超级块进行执行。经对现有文献检索发现,中国专利文献号CN101387970A,
公开日2009_3_18,记载 了一种“利用剖分信息生成超级块的方法”,该技术详细介绍了二进制翻译领域中Crossbit 的构造超级块的一般流程。但是该技术有一个不容忽视的问题在构造超级块的过程中,当 一个基本块在多个超级块中都是被需要时,势必会造成除了只有一个被利用外,另外的超 级块都因为缺少当前块而被中间截断,产生多个较短超级块,或者基本块碎片。另经检索发现,中国专利文献号CN101488096A,
公开日2009_7_22,记载了一种 “利用出入边关系的部分信息构建超级块的方法”,该技术采用的是基于入边和出边的部分 信息来构造超级块的方法,但是该方法在构造超级块的过程中容易产生重复,从而使得基 本块的数量庞大。

发明内容
本发明的目的在于克服现有技术的上述不足,提供一种基于代码复制超级块的程 序执行优化方法,通过基本块代码复制来生成超级块,使得基本块的长度变长,基本块的数 量减少,从而提高生成的超级块的质量,且可移植性好。本发明是通过以下技术方案实现的,本发明通过将程序划分后插入探测指令并构 造得到中间语言超级块,然后设置生成中间语言超级块的平衡机制参数并进行筛选指导处 理;并将中间语言超级块翻译成目标超级块,供二进制翻译器执行,具体包括以下步骤第一步,对程序指令进行划分处理,得到若干基本块。所述的划分处理是指将第i个跳转指令和第i + Ι个跳转指令之间的指令序列作 为一个基本块,其中i表示程序中跳转指令序号,它是从1开始到整个程序中跳转指令个 数之间的正整数。第二步,在每个基本块的头部插入一个探测指令。所述的探测指令是探测构造超级块的头块或者是触发构造超级块例程。第三步,构造中间语言超级块,并实时记录该中间语言超级块所对应的参数。所述的构造中间语言超级块是指当一个基本块的探测指令触发构造超级块历程 的时候,程序将通过查询系统记录的信息,找到符合条件的中间语言块,并将跳转指令部分 进行一定的处理后,罗列到一起,形成一个中间语言超级块。所述的参数包括基本块被共享的次数、超级块被共享的次数、超级块嵌套的含有 超级块的层数、超级块中自体成员基本块的重复次数之和以及当前正在构造的超级块中的 自体成员超级块的重复次数之和。第四步,设置生成中间语言超级块的平衡机制参数并进行筛选指导处理;
4
所述的平衡机制参数包括添加超级块探测代码标示、超级块嵌套层数参数、基本 块的重复频度、自体基本块重复频度和超级块重复频度。所述的筛选指导处理包括以下步骤1)在每一个基本块在翻译系统的记录对象中,增加相应的域,用来记录上述参 数;2)指定的域设定相应的阈值,阈值的设定因程序行为特性的不同会有所不同;3)在构造中间语言超级块的时候将平衡机制参数进行监控,更新;4)基本块或超级块进行加入探测代码或者构造中间语言超级块的过程中,当参数 违反设定的阈值条件时终止当前操作。第五步,将中间语言超级块作为一个翻译单位一次性翻译成目标超级块,然后存 储于内存指定位置并记录该目标超级块的内存地址,最后将二进制翻译器将该内存地址作 为函数入口并直接跳转到该内存地址处执行目标超级块所对应的二进制指令,实现程序执 行优化。与传统技术相比,本发明优势主要体现在,1)从第一条超级块内部指令开始,到最 终一条跳出指令内存地址跨度比较大;2)从第一条指令开始到最后一条指令结束,此超级 块中含有重复的基本块序列,也即在内存中表现为两条紧挨的跳转指令之间的指令序列会 在超级块中重复出现;3)从第一条指令开始到最后一条指令结束,此超级块中含有重复的 超级块序列,也即在内存中表现为两条非紧挨的跳转指令之间的指令序列会在超级块中重 复出现;4)在整个内存空间来看,基本块,超级块的整体数量比较少,内存中指令存放的比 较集中,当然因为长度变长了,相应的整个程序块所占用的内存空间也比传统的方法要大 一些5)对于机器的指令读取来说,因为超级块长度长了,程序会更长时间地停留在超级块 内部,从而其中央处理器的缓存的性能会有所提升,指令的读取的本地性表现更好。本发明技术效果包括程序因此而改善了代码的本地性,程序的执行流也更加流 畅,性能获取了 0. 5% -3%的性能提升,超级块长度增长最长可以达到2个基本块的长度, 换成指令21. 7条,碎片的数量减少最多可以达到25.5%,而最多2. 25%内存膨胀率是可以 接受的。


图1共享块代码复制示意图。图2基于代码拷贝超级块A的构造例程及内存布局示意图。
具体实施例方式下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行 实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施 例。如图1所示,图中,a,b,c…1为基本块或者超级块,el和e2分别为块e的两个代 码拷贝。图1左侧,基本块e或超级块e被两条路径共享,现有的构造策略,只能产生一个 包含e的超级块,而另外一条路径将因为缺少e而被截断。通过代码复制,产生两个基本块 el和e2,分别放在两个超级块中,从而产生两个较长的超级块,否则,因为其中一个超级块被从中间截断,而产生较多碎片。如图2所示,超级块C是已经构造好的超级块放在内存中,当前正在被超级块A的 构造过程中,对它或它的成员块的变量进行检测,更新,和设定。因为之前构造的超级块C 含有基本块m,那么成员基本块m对应的变量repeatjime递增;超级块B在超级块C中 已经存在,那么超级块B的对应变量super_ri5peat_time递增,同时超级块A对应的变量 inner_loop进行累加;基本块η在自体中存在,超级块A对应的变量self_repeat_time 进行递增操作;超级块q在自体中出现重复,那超级块A的对应变量self^superjijpeat time进行递增操作,并且对超级块A的irmer_l00p变量进行递增操作。Crossbit是一个动态二进制翻译系统,它可以将不同体系结构的指令实现动态翻 译和优化。现有的Crossbit已经实现了一个基本的超级块生成方法,也完成了块之间的链 接。程序大部分时间是在翻译后的块之间执行。但是,因为生成的超级块经常因为基本块 共享的问题而截断,平均长度比较短,导致了程序运行的本地性不好,所以,实现一个代码 复制的机制来增长超级块的长度,是很有必要的。在现有的超级块生成方法的基础上,允许 代码拷贝,并对代码拷贝的策略进行了一定的细化。在具体介绍前先稍微介绍下用到的监控变量所代表的意义repeat_time 表示基本块在多个超级块中被共享的次数,比如超级块A,B同时含 有基本块m,那么它的Mpeatjime值就是2。super_repeat_time 表示超级块在多个超级块中被共享的次数,跟r印eat_time 意义基本雷同。inner_loop 表示指定的超级块嵌套的含有超级块的innerjoop加1后的总和, 比如,超级块A内部含有两个超级块B和C,而B含有1个超级块M,C内部全部是基本块,M 内部全部是基本块,那么B的irmerjoop值就是1,C的irmerjoop值就是O,A的irmer_ loop 值就是(1+1)+ (0+1) = 3。self_i^peat_time 超级块中自体成员基本块的重复次数之和。它的值的获取 是利用当前正要被添加的成员基本块的信息来检索整个超级块的成员链表,遇到一个相同 的就对当前被构造超级块的self^Mpeatjime进行递增操作。比如,一个超级块A含有 基本块m-n-o-p-m-o这样一个序列,那么在构造的过程中,m, η, ο, ρ被先后添加,对self_ repeat_time值没有影响,当添加下一个m的时候,self_repeat_time递增,添加ο的时候, 再次递增,那么该超级块A的self_repeat_time值就是2。self_super_repeat_time 记录当前正在构造的超级块中的自体成员超级块的重 复次数之和。它的值的获取类似于Self_i^peat_time,这里不在赘述。首先是剖分的过程,在Crossbit中剖分过程主要有如下步骤1、以基本块为单位划分程序,通常以一个跳转指令开始,以一个跳转指令结束的 指令序列。2、在每个基本块的开头插入探测指令,本例中插入的完成当前基本块执行次数的 计数指令,如果执行的次数达到一定的阈值那么此基本块就作为将要被构造的超级块的头 块,程序没有执行当前被探测到的头块,就触发构造超级块例程也即跳转到构造超级块例 程,等构造完成超级块后,在跳到构造成功的超级块执行。Crossbit构造超级块的方法, 对构造好的超级块不进行探测,这里对超级块还要进行一定程度的探测,如果当前构造的
6super_repeat_time达到了指定的阈值,那么就在翻译生成最终的超级块的头部就不插入 探测指令,否则,插入探测指令,继续检测当前构造超级块运行的热度。代码具体见步骤4。3、当进入执行超级块例程的时候,每一个按照超级块的构造方法或者算法是被需 要的基本块,它都有对应一个初始值为0的repeatjime变量,对这个值进行递增操作。如 果是超级块,那么对它的初始值为0的SUper_ri5peat_time变量进行递增操作,并且对当前 正在构造的超级块的初始值为0的LINNER_L00P值进行递增。4、内存膨胀与超级块构造之间的平衡机制。为了保证代码复制不会带来很大的内 存膨胀问题。本例中通过三个方面进行内存膨胀的控制。4. 1)对是否添加超级块探测代码的判定。如果,无限制的添加超级块探测代码, 那么超级块构造机制会不断的将超级块嵌套的添加到新的超级块中,这样将会带来非常庞 大的内存膨胀,但是,如果对生成的超级块不进行探测,那么将排除类似于小且短但频繁调 用的函数作为较大规模超级块的一部分的情况。通过设定一个阈值来判定是否添加探测代 码。MAX_REPEAT的值选的越大,那么嵌套含有当前超级块的新超级块越多。If(super_repeat_time < SUPER_MAX_REPEAT){...//探测代码}//也即,如果此超级块在多个更大超级块中重复的次数没有超过MAX_REPEAT次, 就进行对此超级块探测4. 2)超级块嵌套的限定。一个超级块是热代码,那么它极有可能被别的块所调用, 从而被超级块构造机制所探测到,嵌套的构造新的超级块。如果,出现极端情况,嵌套调用 的层数过多,那么导致生成极大的超级块,导致内存的极度膨胀。于是要有一个机制来保证 这样的情况不会发生。If(super_repeat_time > 0)//当前要被添加的块是超级块{up_inner_loop() ;//当前正在被添加超级块设置为已经嵌套了一层超级块//对inner_loop变量进行递增操作}Set_inner_loop () ;//记录当前正在被构造的超级块的inner_loop值,也即 对递增后的成员超级块的irmerjoop值进行累加If(inner_loop > MAX_INNERL00P){Break ;//如果当前要被加入超级块的超级块嵌套了很多次,那么就终 止;}4. 3)基本块的重复限定。通常一个比较热的基本块会被多个超级块共享,但是,在实验中,通常基本块重复出现在多个超级块中,次数达到一定的阈值的时候,它所带来的性 能提升比起来它所带来的内存膨胀率变得不是很明显。所以需要设定一个阈值进行设定。If(repeat_time > MAX_REPEAT){break ;H如果一个块出现在过多的超级块中,那么就终止;}4.4)对自体重复基本块或者超级块进行的限定。有些超级块在构造过程当中,下 一个需要的基本块会是自己当前已经构造进去的基本块。情况不是很多,但对个别程序的 性能有比较大影响。对它进行限定的时候,要对之前的r印eatjime变量进行减操作。如 果是超级块就将变量改成对应的超级块变量即可。代码如下For(int i = 0 ;i < chain。 size() ;i++){if (spc = = chain [i])self_repeat_time++ ;repeat_time—;}//循环遍历当前超级块队列,如果是当前基本块重复出现过,就对自体重复基本 块self_i^peat_time递增,并将记录超级块间的r印eat_time进行递减,以保证r印eat_ time记录的是超级块间的重复,而不包括自体重复;对生成好的中间语言超级块进行一定的优化处理,比如跳转执行反转,剔除冗余 指令。返回中间语言超级块翻译成可以在本地机器执行的目标超级块并且执行。不同的程序,其行为特性不一样,所以,对于本发明中采用的阈值也都是不一样 的,在本实施例中,采用的阈值都是2-10之间的数字,SUPER_MAX_REPEAT设为8,MAX_ INNERL00P 设为 3 等。在本实施例中用BENCH INT2000测试用例进行测试,实验数据表明采用本发明改 进后的系统相较于原来的超级块构造方法,获得了的性能提升,超级块的平均长 度增长了 1个,最多接近两个;超级块包含的指令条数最多增加了 21. 7条,平均增加了 15 条;而总共的超级块碎片数量最多减少了 25%,最少减少了 11%。对于内存膨胀方面,平均 来讲仅仅是使得系统产生了 2%平均内存膨胀率,是可以接受的。
权利要求
一种基于代码复制超级块的程序执行优化方法,其特征在于,通过将程序划分后插入探测指令并构造得到中间语言超级块,然后设置生成中间语言超级块的平衡机制参数并进行筛选指导处理;并将中间语言超级块翻译成目标超级块,供二进制翻译器执行。
2.根据权利要求1所述的基于代码复制超级块的程序执行优化方法,其特征是,所述 的程序执行优化方法包括以下步骤第一步,对程序指令进行划分处理,得到若干基本块;第二步,在每个基本块的头部插入一个探测指令;第三步,构造中间语言超级块,并实时记录该中间语言超级块所对应的参数;第四步,设置生成中间语言超级块的平衡机制参数并进行筛选指导处理;第五步,将中间语言超级块作为一个翻译单位一次性翻译成目标超级块,然后存储于 内存指定位置并记录该目标超级块的内存地址,最后将二进制翻译器将该内存地址作为函 数入口并直接跳转到该内存地址处执行目标超级块所对应的二进制指令,实现程序执行优 化。
3.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的划分是指将第i个跳转指令和第i+Ι个跳转指令之间的指令序列作为一个基本块,其 中i表示程序中跳转指令序号,它是从1开始到整个程序中跳转指令个数之间的正整数。
4.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的探测指令是探测构造超级块的头块或者是触发构造超级块例程。
5.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的构造中间语言超级块是指当一个基本块的探测指令触发构造超级块历程的时候,程 序将通过查询系统记录的信息,找到符合条件的中间语言块,并将跳转指令部分进行一定 的处理后,罗列到一起,形成一个中间语言超级块。
6.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的参数包括基本块被共享的次数、超级块被共享的次数、超级块嵌套的含有超级块的层 数、超级块中自体成员基本块的重复次数之和以及当前正在构造的超级块中的自体成员超 级块的重复次数之和。
7.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的平衡机制参数包括添加超级块探测代码标示、超级块嵌套层数参数、基本块的重复频 度、自体基本块重复频度和超级块重复频度。
8.根据权利要求1或2所述的基于代码复制超级块的程序执行优化方法,其特征是,所 述的筛选指导处理包括以下步骤1)在每一个基本块在翻译系统的记录对象中,增加相应的域,用来记录上述参数;2)指定的域设定相应的阈值,阈值的设定因程序行为特性的不同会有所不同;3)在构造中间语言超级块的时候将平衡机制参数进行监控,更新;4)基本块或超级块进行加入探测代码或者构造中间语言超级块的过程中,当参数违反 设定的阈值条件时终止当前操作。
全文摘要
一种计算机技术领域的基于代码复制超级块的程序执行优化方法,通过将程序划分后插入探测指令并构造得到中间语言超级块,然后设置生成中间语言超级块的平衡机制参数并进行筛选指导处理;并将中间语言超级块翻译成目标超级块,供二进制翻译器执行。本发明通过基本块代码复制来生成超级块,使得基本块的长度变长,基本块的数量减少,从而提高生成的超级块的质量,且可移植性好。
文档编号G06F9/45GK101923481SQ201010278538
公开日2010年12月22日 申请日期2010年9月11日 优先权日2010年9月11日
发明者刘博 , 张俊, 管海兵, 邓海鹏, 陈凯 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1