论文部分内容阅读
二进制翻译(Binary Translation)是指在不需要可执行程序源代码的情况下,把源机器平台上的二进制程序经过一定的转换之后运行在目标机器平台上的过程。所谓动态二进制翻译就是边翻译边执行,并在翻译的过程中进行动态优化。动态二进制翻译为解决代码遗留,代码移植以及构建分布式虚拟计算环境等问题提供了一个良好的解决方法,因此在近年来得到了越来越广泛的关注和研究。本文主要研究在动态二进制翻译中如何有效地收集运行时的profiling信息,以及如何用这些信息来进行有针对性的优化,研究内容主要包括:程序运行时的profiling、热路径的识别和超级块的生成、以及针对超级块的优化。Profiling是指对程序运行时信息的统计和收集。传统的动态二进制翻译器采用的profiling方法分为三种:基于基本块、基于跳转边、基于路径。本文结合平台自身的特性,实现了一种开销小的profiling的方法来收集基本块和跳转边的信息。热路径的识别是指根据热路径识别算法预测出一条热路径,通常动态二进制翻译器都是通过跳转边的信息或者程序的运行轨迹来预测热路径,本文在CrossBit平台上实现了一种“先热先选择”的热路径识别算法,这种算法特点是原理简单、效率高。生成超级块是指将热路径上的基本块合并成具有单一入口和多个出口的超级块,这样做一方面可以减少因基本块结束而引发的上下文切换,另一方面,超级块中包含更多的指令,给中间代码的优化提供了广阔的空间。程序在运行过程中从超级块内部跳出的概率越小意味着超级块的性能越好。本文实现超级块内条件指令条件码的翻转,大大降低了程序从超级块内部跳出的概率,提升了超级块的性能。前端解释器在对源代码做解码的过程中,引入了新的指令来实现源寄存器与虚拟寄存器之间的映射,这些新的指令构成了基本块间的冗余。本文实现了超级块内冗余GET指令的识别和删除,使得系统的性能提升了1%~10%。本文在CrossBit平台上实现了热路径优化,并通过SPEC CPU2000基准测试程序进行验证。实验数据表明,CrossBit的整体性能有10%到30%不同程度的提高,从而证明本文提出的优化算法能有效的改善动态二进制翻译器的性能。