论文部分内容阅读
随着电子信息化时代的到来,层出不穷的大型消费、娱乐类软件让编译优化技术面临了更大挑战。由于编译优化几乎不能达到最优,因此,尽可能挖掘并优化编译器未充分优化的部分,具有非常高的理论和实践意义。本文的研究工作是依托于中国科学院声学研究所数字系统集成实验室自主研发、具备自主知识产权的高性能、低功耗SuperVDSP展开。本文构建的编译后优化平台是由处理器建模、程序性能分析、编译后优化三部分组成,其中重点研究了多项编译后优化技术。 首先,本文深入研究了处理器建模技术。为了提升指令译码效率,本文提出了一种基于多级哈希表的译码算法,该算法根据指令编码特征将目标指令集组织成为多级哈希表。仿真实验表明:针对TMS3206200处理器指令集,该算法提升指令译码效率1.67~4.01倍;针对SuperVDSP指令集时,该算法可提升译码效率4.97~6.09倍。为了加快调试进度,本文提出了一种面向快速条件断点的代码优化及生成策略。该策略利用有序二叉决策图模型描述断点条件,通过合并冗余节点、删除无关节点有效地实现了代码优化及生成,在面向X86/X64体系结构的仿真实验中,它与GCC的优化结果几乎一致,但编译时间降低了约24.44%。 其次,本文在处理器模型的基础上对程序性能分析进行了深入研究,提出了一套不依赖于硬件平台的实现方法。该方法根据需要定义了多条伪指令并进行代码插桩,完成了对基础性能、分支概率、关键路径、热点程序与数据等的统计,这些性能数据是后续优化工作的基础。 最后,本文对编译后优化技术进行了深入研究和探讨。为了组织汇编程序并描述指令之间的关系,本文研究并建立了汇编级数据依赖图、控制流图以及程序调用图。通过组织这三个图的关系,形成了跨文件调度框架。本文将汇编指令视为中间语言,研究了细粒度的指令并行调度,提出了一种无补偿的代码移动方法以及一种基于哈密尔顿有向路径查找的并行调度算法。仿真实验表明:本文提出的并行调度算法相比于列表调度算法提高指令并行度平均约6.63%,代码移动结束后实施该并行调度算法可提高约6.11%程序性能。传统延迟槽调度算法一般不考虑指令级并行性,针对这一问题,本文综合考虑指令并行性与延迟槽填充之间的冲突并提出一个新算法,相比于传统全局延迟槽调度算法,该算法可获得额外3.49%的性能提高。此外,本文建立了一套用于函数栈优化的代数系统,研究了冗余栈操作释放以及跨文件过程间优化,该套系统最大可提高7.36%性能。配合已建立的跨文件调度框架,本文还针对指令Cache的访存优化开展了研究,在综合考虑循环次数与分支概率的基础上提出了一种过程间重排序算法。仿真实验表明,该算法应用于SuperVDSP平台平均可降低1.96%的访问缺失率。 综上所述,本文通过研究并构建编译后优化平台,提出了多种优化算法及实现策略,并取得了很好的效果。