论文部分内容阅读
二进制翻译技术通过将已完成编译的客户机指令翻译为宿主机指令,实现既有软件的跨体系结构运行,以解决不同体系结构之间的软件兼容问题。执行效率较低是制约二进制翻译发展的主要问题,性能优化始终是该领域的研究热点之一。本文基于数据流和控制流分析,提出了二进制翻译优化的新方法。 首先,本文提出在原有翻译结构中增加基于数据流图的中间表示,并通过轻量级的数据流分析实现翻译后代码的优化。该中间表示包含宿主机指令信息,能够实现与宿主机体系结构相关的优化。基于数据流分析,本文提出通过对数据流节点进行分类、消除、合并,以优化翻译代码中的冗余指令。该方法成功消除了冗余数据迁移、冗余访存地址运算、冗余常量生成和部分冗余访存等操作。进一步地,针对翻译代码中大量存在的热点访存,本文提出为最常被访问的内存数据分配专用的寄存器。该方法基于对访存指令的数据流分析,能够消除大量针对客户机模拟寄存器的热点访存操作。 其次,本文提出了基于控制流分析的适用于二进制翻译的动态优化改进方法。一方面,基于控制流分析能够消除冗余的条件码设置操作,而分析过程不局限于执行热点,而是包括所有翻译后代码段,这有别于传统动态优化。另一方面,本文针对控制调度过程中的函数调用过程,结合数据流分析提出了改进的控制调度方法。优化方法以宿主机返回地址代替客户机返回地址存入客户机堆栈,从而在无需地址转换和生成客户机返回地址的条件下实现返回型间接跳转。该项优化取得了比专用硬件优化更好的优化效果。 最后,本文在多核处理器上通过执行线程和优化线程的并行化,提高采用动态优化时的程序响应速度,并改进了并行框架中针对共享数据的读写策略。 本文研究工作在龙芯处理器平台上实现了上述优化方法。实验表明,上述优化显著提高了二进制翻译的模拟执行效率,平均提高到原有效率的1.8倍,最高达到3.1倍。其中,定点测试达到平均2.3倍,浮点测试达到平均1.3倍。优化后,定点测试的模拟执行效率平均达到宿主机本地静态编译执行效率的52%,浮点测试达到27%,整体平均达到40%。其中,部分测试的模拟执行效率接近甚至超过本地执行效率,最高达到110%。