论文部分内容阅读
动态二进制翻译器能够在运行时将针对源体系结构编译的软件动态翻译成目标体系结构的软件并使之运行。尽管随着新的体系结构不断涌现,动态二进制翻译器技术越来越流行,但是动态二进制翻译器往往会受限于在翻译码上可执行的优化方法,无法使翻译码的执行性能同移植程序的执行性能相媲美。因为源可执行文件中只有二进制代码,缺乏源程序高级语言的信息,而且动态二进制翻译器在翻译过程中需要保证翻译码同源码在二进制级别上的兼容性,因此动态二进制翻译器往往无法采用一些在静态编译器中常用的代码优化方法。另外,为了保证在异常发生的情况下能够恢复出一个精确的体系结构状态,翻译码中的指令调度被限制在一个相对较小的范围内,更进一步的限制了动态二进制翻译器的翻译码优化。本文则从一个创新的角度提出了一种解决上述问题的方法。该方法在静态编译器中收集那些对动态二进制翻译器优化有帮助的信息,并在可执行文件中开辟一个独立的注解信息段,将这些优化相关的信息以一定的格式写入其中。在动态二进制翻译阶段,动态二进制翻译器就可以利用注解信息对翻译码进一步优化,提高翻译码的质量。本文在GCC 4.0和IA-32 Execution Layer上实现了注解信息制导的动态二进制翻译框架,并且选择在可执行文件中生成内存优化相关的注解信息。基于注解信息,本文在动态二进制翻译器IA-32 EL中尝试了包括寄存器化,放宽Memory Ordering的限制,加强访存指令的地址消岐和放宽精确异常处理等内存优化。本文选择SPEC2000为基准测试程序,实验结果表明注解信息制导的动态二进制翻译器中的内存优化能够在引入相对较小的额外开销下获得十分不错的性能提升。实验数据显示优化后,SPECfp2000的整体性能提高了15.03%,而SPECint2000的整体性能则提高了1.21%。对于某些特定的基准测试程序,性能提升甚至达到了37.09%。