论文部分内容阅读
动态翻译技术是一种即时编译技术,它将针对源体系结构编译生成的源机器码动态翻译为可以在目的体系结构上运行的翻译码。动态优化技术是指在软件运行时获取动态信息并进行代码优化的技术。动态翻译及优化技术在动态二进制翻译系统、动态二进制优化系统和高级语言虚拟机中得到了广泛的应用和研究。这些技术对遗产代码移植、硬件设计、程序性能提高、网络应用、系统安全、并行编程模型等方面都有重要的意义。动态翻译及优化技术已经成为现代编译技术研究的热点之一。本论文着重研究提高动态翻译和优化系统性能的一系列技术。首先,本文在深入探讨了动态二进制翻译系统中影响性能的主要因素的基础上,提出了注解信息制导的翻译及优化方法,来结合传统编译器和动态二进制翻译和优化系统以提高二进制代码在计算机系统上的运行性能。然后,本文针对源体系结构中的SIMD指令集,分析了翻译SIMD指令集的技术难点,并提出了翻译SIMD指令的优化翻译方法。再后,本文转向对动态翻译实用程序的研究,并针对模块化实用桌面程序中的“热”模块频繁装卸载问题提出了模块翻译复用方法,以降低反复翻译“热”模块引起的开销。最后,本文研究了高性能计算领域中Java程序内的数组边界检查问题,提出了利用自适应动态翻译方法来优化外提循环内的数组边界检查。本文的贡献在于:1.本文在比较分析动态二进制翻译生成的翻译码性能偏低原因的基础上,指出传统编译器在生成二进制代码的同时需要生成注解信息来指导该二进制代码的动态翻译及优化。本文给出了注解信息制导的动态二进制翻译及优化的整体框架,以及一种可扩展的注解信息参考格式。2.本文提出的SIMD数据类型分析算法可以在Itanium体系结构上高效地模拟IA-32 SIMD指令。该算法利用三个Itanium浮点寄存器和两个Itanium整数寄存器来映射一个XMM寄存器,并有效地解决这些映射寄存器之间的数据同步问题。该算法可以被扩展使用于任何多映射寄存器之间数据同步的场合。3.本文提出了针对SIMD指令翻译的一系列优化方法,以进一步提高SIMD代码的翻译质量。本文对SIMD指令优化翻译设计了三个算法:SIMD数据类型重分配算法,翻译时块间类型冲突消除算法及运行时块间类型冲突消除算法。它们通过消除块间类型冲突和降低翻译码块的执行代价来进一步提高翻译码的性能。4.本文提出了一种针对可装载软件模块的翻译重用引擎和内存管理机制以提高实用桌面程序的整体运行性能。实用桌面程序的动态翻译开销远远高于CPU2000标准程序。一部分实用桌面程序的一次运行通常多次装载卸载软件模块,且被多次反复装载与卸载的软件模块通常集中在一部分“热”软件模块。对这些软件模块的反复翻译非常费时,同时反复的翻译会带来大量的内存浪费。针对可装载软件模块的翻译重用引擎和内存管理机制解决了这些问题。5.本文利用自适应动态翻译方法解决了高性能计算中Java程序内的数组边界检查的循环外提问题。在高性能计算领域程序通常使用大量数组进行计算,而在Java语言中数组操作会引起数组边界检查。消除数组边界检查的一种有效手段为边界检查循环外提。现有的边界检查循环外提主要采用多版本方法:它将迭代空间划分为安全和非安全区域,然后在安全区域执行完全优化的代码而非安全区域执行非优化的代码。本文提出的自适应循环翻译算法从动态优化的角度更优化地解决这些问题。首先,在第一次编译循环时该算法仅产生优化版本,直到运行时边界检查失败后才生成非安全区的版本。其次,在产生非安全区的版本时,它利用动态信息使得区域划分和翻译码生成更加优化。