CN101452396A - 结合静态优化的动态二进制翻译方法 - Google Patents
结合静态优化的动态二进制翻译方法 Download PDFInfo
- Publication number
- CN101452396A CN101452396A CNA2008102078043A CN200810207804A CN101452396A CN 101452396 A CN101452396 A CN 101452396A CN A2008102078043 A CNA2008102078043 A CN A2008102078043A CN 200810207804 A CN200810207804 A CN 200810207804A CN 101452396 A CN101452396 A CN 101452396A
- Authority
- CN
- China
- Prior art keywords
- program
- code
- optimization
- translation
- fundamental block
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种结合静态优化的动态二进制翻译方法,在源程序第一遍执行时在翻译后的代码中插入探测指令,收集丰富的剖分信息,并在程序运行结束时将剖分信息和翻译后的目标代码持久化,利用保存的剖分信息对翻译后的目标代码在静态期间做各种优化,在此程序以后的运行中直接加载这些经过优化的目标代码。本发明提出的这种新的翻译模式,可以消除动态二进制翻译器运行时的profiling、优化开销,减少翻译开销,通过将优化放在静态执行,可以利用更加全面的剖分信息,并且不用顾忌优化的开销,提高了优化后代码的质量,从而使得程序的性能在第二遍及以后的运行中得到明显的提高。
Description
技术领域
本发明涉及一种结合静态优化的动态二进制翻译方法,用于提高源机器平台的程序在翻译器上的执行性能。本发明属于二进制翻译技术领域。
背景技术
动态二进制翻译用于将对应源机器平台的二进制代码动态翻译为可在目标机器平台上运行的二进制代码,从而对软件移植和改善系统性能提供了途径。动态二进制翻译器运行时仅对执行到的代码片段进行翻译,对用户完全透明。利用程序运行时的剖分信息可以对翻译好的代码做有针对性的优化,而这些动态执行的信息在静态是无法被收集到的。
Profiling(剖分)是指通过对运行中的程序进行监测,对体现程序执行行为、特征的数据信息进行收集的过程。这些剖分信息可以用作对翻译好的目标代码进行优化的依据。常用的profiling方法有以下两种:
1、采用instrumentation(插装)的方式,这种方法通过在代码中插入探针指令或直接利用支持profiling技术的硬件来采集与程序执行行为、特性有关的数据信息。
2、采用sampling(采样)的方式,这种方法以一定的时间间隔对程序运行的相关数据进行数据收集,而不需要对程序进行修改。
现在动态二进制翻译器的优化一般都是利用收集到的剖分信息在程序动态执行的过程中做优化,这样在动态可以做一些静态翻译器无法完成的优化工作,比如指令分支跳转预测,超级块的生成,以及针对超级块的优化。这些优化通常会带来明显的性能提升。
但是受制于以下几个方面,动态期间进行的这些优化带来的性能提升很难再有大的突破:
1、收集剖分信息的过程是动态进行的,不管是采用instrumentation技术还是sampling技术,收集过程本身都会有一定的性能开销。如果想做一些更深入的优化,必然需要关于程序运行的更详细的剖分信息,比如要想生成高质量的超级块,需要对程序的执行路径做profiling,这样会带来很大的性能开销。也就是说收集剖分信息和利用剖分信息做优化是矛盾的两个过程,动态做优化要想取得理想的效果就要在两者之间寻找一个平衡点。
2、优化程序本身会消耗性能,而且如要获得更好的优化结果,优化算法一般也会更复杂,这就会使性能开销增加。
3、在动态时无法取得对程序整个运行期间的行为信息,动态优化利用的剖分信息一般只是程序运行到某一阶段的行为信息,不能反映程序运行行为的全貌,这会导致一些动态优化(比如指令分支跳转预测等)的优化效果打折扣。
4、假如同一个程序要在动态二进制翻译器上运行多次,将对应源机器平台的二进制代码翻译成目标机器平台的二进制代码的过程在程序每次运行时都会存在,这部分翻译时间也会带来开销。
针对上述缺点,一般的解决方案是简化profiling的实现,抛弃复杂的优化算法,从而降低性能的开销。显而易见,这种妥协性质的方案无法获得较优的优化效果。
除此之外,另一种解决方案是分阶段翻译,其主要的步骤是:首先,模拟执行源程序获取剖分信息;然后,根据获得的信息,优化翻译过程,产生较优的目标代码,同时将目标代码保存;最后,在之后的执行中,利用现有的目标代码提高性能。这一方案虽能提高执行性能,但其优势仅在于利用剖分信息产生较优的目标代码,而不是对目标代码或执行流本身的优化,无法大幅度提高实际执行性能。
发明内容
本发明的目的在于针对现有技术的不足,提供一种结合静态优化的动态二进制翻译方法,把一些动态期间执行的优化操作放在静态执行,降低程序运行时翻译和优化的开销,使程序执行性能有较大的提升。
为实现上述目的,本发明在源程序第一遍执行时在翻译后的代码中插入探测指令,收集丰富的剖分信息,并在程序运行结束时将剖分信息和翻译后的目标代码持久化,利用保存的剖分信息对翻译后的目标代码在静态期间做各种优化,在此程序以后的运行中直接加载这些经过优化的目标代码。
本发明的结合静态优化的动态二进制翻译方法的具体步骤如下:
1、以基本块为单位划分程序,跳转指令的下一条指令到下一个跳转指令为一个基本块。
2、收集翻译后代码的重定位信息。二进制翻译器以基本块为单位,将源机器代码翻译成目标代码,收集翻译后的目标代码的重定位信息,生成一个重定位信息表,重定位信息表中记录下每条需要重定位指令在内存中的偏移、重定位类型、回填地址时要使用的详细信息。
保存到文件中的二进制代码会涉及对内存地址的访存等操作,在动态二进制翻译器翻译后的代码中,某些这类针对内存地址操作的指令在程序每次运行时是变化的,所以动态二进制翻译器翻译源机器指令时会生成一个重定位信息表,将这些变化的信息记录下来。
3、在每个目标代码基本块的尾部插入探测指令,用以在程序运行时收集剖分信息。
4、程序执行结束时将剖分信息、翻译后的目标代码和重定位信息表保存到文件中。
文件格式的设计,需要适合快速遍历信息的要求,以期提高后续分析优化阶段的效率和效果。
5、静态利用保存在文件中的剖分信息对翻译后的目标代码进行分析、优化(比如生成超级块,分支跳转指令预测,对一些跳转指令的合并,静态做链接等),并将优化后的代码保存在文件当中。
文件格式需重新设计,以适应后续加载执行过程。这些优化在动态也可以做,但如果将这些优化放到静态来做程序执行性能会有更大的提高。
6、相同的程序在第二次及以后运行时,以基本块为单位直接加载静态分析优化过的代码文件,每加载完一个基本块,根据重定位信息表对此基本块中的指令进行重定位。
因为加载进来的是翻译后的目标代码,所以不需要将源机器代码翻译成目标代码的过程。另外由于目标代码已经在静态进行过优化,Profiling和动态优化的开销也被消除。
本发明所涉及的方法在源程序需要多次运行的情况下具有显著的优点。首先翻译源平台指令到目标平台指令的时间可以省掉。其次在程序第二次及以后的运行中不需要收集剖分信息,而且也不需要动态运行复杂的优化算法。最重要的是在程序第一遍运行中可以收集到更加丰富的剖分信息,并且静态不用顾忌优化的开销,利用这些保存的剖分信息可以对翻译好的目标代码进行详细、全面的分析,利用复杂的优化算法对其做优化,而这些优化算法有些在动态无法完成,有些虽然可以在动态完成但会带来很大的性能开销。只要保证程序第一遍运行时收集的剖分信息足够丰富,在动态做的优化都可以使用本发明的方法实现。由于在程序第二遍及以后运行时直接加载保存的翻译后目标代码,这些代码已经经过优化,这样使得优化效果从程序运行初始阶段就得以体现。而在传统的动态优化中,优化后的代码需要经过一定的时间才能被利用。采用本发明的方法会明显提高动态二进制翻译器的性能。
具体实施方式
为了更好的理解本发明的技术方案,以下通过具体的实施例作进一步描述。以下实施例不构成对本发明的限定。
实施例采用了一个多源多目标的动态二进制翻译系统Crossbit,它能翻译多种体系结构的指令集,并在动态做优化。Crossbit从架构上分为前端、中端、后端三大部分。前端负责将源机器平台指令翻译成Crossbit的中间指令,中端对中间指令进行进一步转换,后端将中间指令转换为可运行的目标平台机器代码。Crossbit是一个的动态二进制翻译器,本实施例采用的方法可将Crossbit改造成结合静态优化的动态二进制翻译器,具体步骤如下:
1.以基本块为单位划分程序,跳转指令的下一条指令开始到下一个跳转指令为一个基本块。
这部分工作在Crossbit前端将源机器平台的代码翻译为中间指令时会完成,程序被包装成一个个基本块,每个基本块都以跳转、系统调用等指令结尾。经过划分基本块后的程序能够更方便地进行翻译和优化。
2.收集翻译后目标代码的重定位信息
二进制翻译器以基本块为单位,将源机器代码翻译成目标代码,收集翻译后的目标代码的重定位信息,生成一个重定位信息表。
在Crossbit中有5种类型的数据在下次运行时需要重定位,分别是:
1)REG_ADDR:记录Crossbit前端机器平台相应整型寄存器的重定位信息。Crossbit模拟了源机器平台的cpu,Crossbit中都有相应的变量来维护源机器平台的所有寄存器的状态信息,这些虚拟的寄存器是在内存中的,源机器指令中对寄存器的操作被翻译成了对内存地址的访存操作,而Crossbit中模拟源机器寄存器的变量在每次运行时在内存中的地址是变化的,所以涉及对这类内存操作的指令需要被重定位。
2)FREG_ADDR:记录对应Crossbit前端机器平台的浮点型寄存器的重定位信息。原因同上。
3)GLOBAL_VAR:在经过Crossbit翻译后的对应目标机器平台的代码中,会有一些对全局变量进行操作的指令,这些全局变量是在Crossbit中定义的,每次运行时它们的地址也是不确定的。所以对这类变量操作的指令需要重定位。
4)EXITS_NEXT:在Crossbit中,每个基本块执行到最后会将跳转出口记录到一个Exit结构体中,而这个Exit是属于TBlock的局部变量,程序每次运行中Exit地址会发生变化。
5)REG_SPILL:对于动态二进制翻译系统来说,寄存器分配要解决的问题是如何是源机器寄存器高效的映射到目标机器的寄存器。在目标机器的寄存器资源大于源机器的情况下,只需要将源机器寄存器直接一一对应到目标机器的寄存器即可。但在另一种情况下,源机器具有更多的寄存器资源,例如前端mips后端x86,源机器mips拥有32个通用寄存器,目标机器x86只有8个通用寄存器。如果目标机器的寄存器全被使用,只能替换掉其中的一个以满足当前的分配需求。这种情况下寄存器分配算法会在翻译好的代码中插入指令来将替换出的寄存器的值spillout(脱出)到内存中,保存这些spillout寄存器的变量的地址在Crossbit每次运行时也是会改变的,所以要对这些spillout指令进行重定位。
在Crossbit后端翻译时会将所有需要重定位的指令信息收集到重定位信息表中,记录下每条需要重定位指令在内存中的偏移、重定位类型、回填地址时要使用的详细信息。
3.在每个目标代码基本块的尾部插入探测指令,利用探测指令收集程序运行时剖分信息。
Crossbit的后端将中间指令翻译成目标机器平台的代码,在这个过程中往翻译好的代码中插入探测指令。插入的探测指令尽可能地精简,因为这些指令会频繁被执行。
所有的TBlock都有数据结构专门用来保存剖分信息,每当一个基本块被执行,探测指令也同时被执行,将存储程序执行行为的变量(包括当前基本块执行次数,跳到当前基本块的这条边的执行次数)执行加1操作。
4.程序执行结束时将内存中的剖分信息、翻译后的目标代码、重定位信息等以一定的格式保存到文件中。
在本实施例中,将剖分信息和翻译过的代码分别保存到两个文件中,一个文件保存剖分信息、目标代码基本块的信息和重定位信息,另一个文件保存翻译过的代码。下面介绍前者的文件结构,文件头保存关于文件的汇总信息,包括TBlock的数量,Exit的数量,重定位信息表的项数等。然后将TBlock对象信息、Exit对象信息、重定位信息分类保存和边的关系信息分类保存,这种保存方式有很好的结构性,适合于对文件中的各类数据项查找、修改。后者的文件结构很简单,只是将翻译好的目标代码以二进制形式保存到文件中。
5.静态利用保存在文件中的剖分信息对翻译后的目标代码进行分析、优化(比如生成超级块,分支跳转指令预测,对一些跳转指令的合并,静态做链接等),并将优化后的代码保存在文件当中。这里的文件结构采用了能提高运行时加载速度的设计,将各种数据项以TBlock为索引保存,在加载时可以顺序读取,不用频繁移动文件指针,从而提高加载文件的速度。
本实施例中,在静态实现了超级块生成算法,分支跳转指令预测,以及对一些跳转指令的合并等优化。另外将基本块之间的链接尽可能地在静态做好。这样动态可以省掉动态做链接的开销。这些优化在一般的动态二进制翻译器中是在动态完成的,在本发明中,我们将这些优化放到静态,利用丰富的剖分信息以及使用更复杂的优化算法大大提高了优化后目标代码的质量。
6.相同的程序在第二次及以后运行时可以直接加载优化后的代码运行。
程序第二次运行开始时需要加载源程序文件,同时以基本块为单位直接加载静态分析优化过的代码文件,并初始化SPC和TBlock的映射表,将加载进来的经过静态优化的代码信息填到这个映射表中。每加载完一个基本块,接着根据重定位信息表对此基本块中的指令进行重定位,将程序每次期间会改变的内存地址信息进行回填。
由于程序在静态期间已经做好了链接,如果当前执行块的下一块已经被翻译过,程序会继续执行下去而不跳回Crossbit主程序。如果程序运行期间当前块没有做链接,会跳回到Crossbit,到SPC与TBlock映射表中查找,看对应某SPC的基本块是否已经被翻译过,如果没有,动态二进制翻译器会翻译这个基本块,并将此基本块的SPC与TBlock的关系更新到映射表中。
Claims (1)
1、一种结合静态优化的动态二进制翻译方法,其特征在于包括如下步骤:
1)以基本块为单位划分程序,跳转指令的下一条指令开始到下一个跳转指令为一个基本块;
2)二进制翻译器以基本块为单位,将源机器代码翻译成目标代码,收集翻译后的目标代码的重定位信息,生成一个重定位信息表,重定位信息表中记录下每条需要重定位指令在内存中的偏移、重定位类型、回填地址时要使用的详细信息;
3)在每个目标代码基本块的尾部插入探测指令,用以在程序运行时收集剖分信息;
4)程序执行结束时将剖分信息、翻译后的目标代码和重定位信息表保存到文件中;
5)静态利用保存在文件中的剖分信息对翻译后的目标代码进行分析、优化,并将优化后的代码保存在文件当中;
6)相同的程序在第二次及以后运行时,以基本块为单位直接加载静态分析优化过的代码文件,每加载完一个基本块,根据重定位信息表对此基本块中的指令进行重定位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102078043A CN101452396B (zh) | 2008-12-25 | 2008-12-25 | 结合静态优化的动态二进制翻译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102078043A CN101452396B (zh) | 2008-12-25 | 2008-12-25 | 结合静态优化的动态二进制翻译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101452396A true CN101452396A (zh) | 2009-06-10 |
CN101452396B CN101452396B (zh) | 2012-04-25 |
Family
ID=40734644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102078043A Expired - Fee Related CN101452396B (zh) | 2008-12-25 | 2008-12-25 | 结合静态优化的动态二进制翻译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101452396B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102193788A (zh) * | 2010-03-12 | 2011-09-21 | 复旦大学 | 基于动态二进制翻译的跨平台驱动程序复用方法 |
CN102662830A (zh) * | 2012-03-20 | 2012-09-12 | 湖南大学 | 一种基于动态二进制翻译框架的代码复用攻击检测系统 |
CN103858101A (zh) * | 2011-10-03 | 2014-06-11 | 国际商业机器公司 | 采用解码时间指令优化连接用于增强应用二进制接口(abi)的代码 |
CN103838564B (zh) * | 2012-11-27 | 2017-02-15 | 重庆新媒农信科技有限公司 | 一种属性加载方法及系统 |
CN105279004B (zh) * | 2015-11-24 | 2018-06-26 | 无锡江南计算技术研究所 | 一种基于采样剖析的轻量级程序代码重排方法 |
CN108228239A (zh) * | 2016-12-13 | 2018-06-29 | 龙芯中科技术有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
CN110928558A (zh) * | 2018-09-19 | 2020-03-27 | 恩德莱斯和豪瑟尔分析仪表两合公司 | 安装程序的方法、嵌入式系统,以及生成附加信息的方法 |
CN111625279A (zh) * | 2020-04-27 | 2020-09-04 | 中国人民解放军战略支援部队信息工程大学 | 基于动态链接库的动静融合二进制翻译方法及系统 |
CN114461227A (zh) * | 2022-04-13 | 2022-05-10 | 飞腾信息技术有限公司 | 运行软件的方法、装置以及机器可读存储介质 |
CN114995832A (zh) * | 2022-06-28 | 2022-09-02 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
CN115543547A (zh) * | 2022-11-30 | 2022-12-30 | 北京太极信息系统技术有限公司 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
WO2023164897A1 (zh) * | 2022-03-03 | 2023-09-07 | 华为技术有限公司 | 一种二进制程序的优化方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100359470C (zh) * | 2004-06-30 | 2008-01-02 | 中国科学院计算技术研究所 | 动静结合二进制翻译中静态信息不完备的处理方法及装置 |
CN101241444B (zh) * | 2008-02-21 | 2011-06-15 | 上海交通大学 | 用于动态二进制翻译的调试方法 |
-
2008
- 2008-12-25 CN CN2008102078043A patent/CN101452396B/zh not_active Expired - Fee Related
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102193788A (zh) * | 2010-03-12 | 2011-09-21 | 复旦大学 | 基于动态二进制翻译的跨平台驱动程序复用方法 |
CN103858101A (zh) * | 2011-10-03 | 2014-06-11 | 国际商业机器公司 | 采用解码时间指令优化连接用于增强应用二进制接口(abi)的代码 |
CN103858101B (zh) * | 2011-10-03 | 2016-10-26 | 国际商业机器公司 | 代码处理方法和代码处理系统 |
CN102662830A (zh) * | 2012-03-20 | 2012-09-12 | 湖南大学 | 一种基于动态二进制翻译框架的代码复用攻击检测系统 |
CN103838564B (zh) * | 2012-11-27 | 2017-02-15 | 重庆新媒农信科技有限公司 | 一种属性加载方法及系统 |
CN105279004B (zh) * | 2015-11-24 | 2018-06-26 | 无锡江南计算技术研究所 | 一种基于采样剖析的轻量级程序代码重排方法 |
CN108228239A (zh) * | 2016-12-13 | 2018-06-29 | 龙芯中科技术有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
CN110928558A (zh) * | 2018-09-19 | 2020-03-27 | 恩德莱斯和豪瑟尔分析仪表两合公司 | 安装程序的方法、嵌入式系统,以及生成附加信息的方法 |
CN110928558B (zh) * | 2018-09-19 | 2023-11-03 | 恩德莱斯和豪瑟尔分析仪表两合公司 | 安装程序的方法、嵌入式系统,以及生成附加信息的方法 |
CN111625279A (zh) * | 2020-04-27 | 2020-09-04 | 中国人民解放军战略支援部队信息工程大学 | 基于动态链接库的动静融合二进制翻译方法及系统 |
WO2023164897A1 (zh) * | 2022-03-03 | 2023-09-07 | 华为技术有限公司 | 一种二进制程序的优化方法及装置 |
CN114461227A (zh) * | 2022-04-13 | 2022-05-10 | 飞腾信息技术有限公司 | 运行软件的方法、装置以及机器可读存储介质 |
CN114995832A (zh) * | 2022-06-28 | 2022-09-02 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
CN114995832B (zh) * | 2022-06-28 | 2023-03-21 | 湖南卡姆派乐信息科技有限公司 | 一种动静结合的二进制程序翻译方法 |
CN115543547A (zh) * | 2022-11-30 | 2022-12-30 | 北京太极信息系统技术有限公司 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101452396B (zh) | 2012-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101452396B (zh) | 结合静态优化的动态二进制翻译方法 | |
US9946523B2 (en) | Multiple pass compiler instrumentation infrastructure | |
CN102193811B (zh) | 消除内存访问冲突的编译装置及其实现方法 | |
US8122439B2 (en) | Method and computer program product for dynamically and precisely discovering deliquent memory operations | |
Bebenita et al. | Trace-based compilation in execution environments without interpreters | |
KR102161192B1 (ko) | 코어 트레이스로부터 데이터 마이닝을 하기 위한 방법 및 장치 | |
Wang et al. | Fast and accurate cache modeling in source-level simulation of embedded software | |
Pham‐Quoc et al. | A high‐performance fpga‐based bwa‐mem dna sequence alignment | |
Janjusic et al. | Gleipnir: A memory profiling and tracing tool | |
CN104346378B (zh) | 一种实现复杂数据处理的方法、装置及系统 | |
CN103092618A (zh) | 基于软件Cache的Dalvik虚拟机JIT加速方法 | |
JP6394341B2 (ja) | 計算装置、計算方法、および計算プログラム | |
CN105447285A (zh) | 一种提高OpenCL硬件执行效率的方法 | |
CN101593125B (zh) | 使用监控线程对二进制翻译程序执行流程动态监控的方法 | |
Giorgi et al. | Translating timing into an architecture: the synergy of COTSon and HLS (domain expertise—designing a computer architecture via HLS) | |
CN104731968A (zh) | 一种单机的大规模数据集的聚类挖掘方法 | |
CN103777997A (zh) | 一种基于mips的java虚拟机硬件无关化平台及其无关化改进方法 | |
Rashid | An efficient cycle accurate performance estimation model for hardware software co-design | |
CN102360306A (zh) | 高级语言代码中循环数据流图提取优化信息处理方法 | |
CN101546271A (zh) | 动态二进制翻译系统中超级块的寄存器分配方法 | |
CN110287378A (zh) | 一种基于动态代码生成的图计算方法及系统 | |
CN103473319B (zh) | 一种热点数据的统计方法 | |
CN102279733B (zh) | 一种开源平台及其实现数据处理的方法 | |
Wagner et al. | A scriptable, standards-compliant reporting and logging extension for SystemC | |
US20220342647A1 (en) | Profiling and optimization of compiler-generated code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120425 Termination date: 20171225 |
|
CF01 | Termination of patent right due to non-payment of annual fee |