论文部分内容阅读
编译器的开发者所面对的各种编译优化常常都是非常复杂的,甚至是NP问题。所以编译器开发者会从复杂问题中抽取出多个属性来构建模型去描述目标优化,以期得到近优解。但是在实际开发中,所构建的模型可能没有全面准确描述目标优化,或者构建的模型对需要编译的目标程序描述不够合理而无法得到期望的性能,这需要我们有针对性地修改目标优化。另一方面,编译器所面向的硬件结构是非常复杂的,并且发展迅速。当硬件结构发生改变,编译优化也需要进行相应调整。这些都对编译优化的调优提出了多方面要求,编译优化适应性研究的出发点是如何让优化的调试过程自动进行,在有限的时间内寻找到更为合适的优化配置,包括优化选项的组合,优化模型的参数调整等。迭代编译和机器学习是常用的两种方法,本文中的研究都是基于机器学习展开,主要贡献如下: 1.提出基于静态分析的快速机器学习,这是一种基于遗传算法的机器学习。机器学习通常都是非常耗时的过程,如果采用程序的运行时间作为遗传算法中的适应值,对于CPU2000这样的大型程序来说,机器学习将花费好几天的时间。而基于静态分析的快速机器学习的主要思想是:在编译过程中收集优化生成的静态信息来作为机器学习的适应值;然后通过限定静态分析的热点区域,进一步减少静态分析的时间和空间开销,同时保证一定的精确度。最后,可以进一步添加部分动态时的信息,以增加机器学习的能力。 2.根据基于静态分析的快速机器学习思想,本文就寄存器分配提出了两种快速机器学习方法:溢出代码敏感的机器学习和溢出代码与热函数敏感的机器学习。溢出代码敏感的机器学习是将寄存器分配中产生的溢出代码作为活跃区间的权值函数的适应值,能大大降低时间开销,同时采用热文件来限定机器学习的范围,使其能较好地突出目标优化的作用。而溢出代码与热函数敏感的机器学习,其适应值为溢出代码加上profiling信息,这能更为准确描述溢出代码在程序中的分布和溢出代码对程序的影响。溢出代码与热函数敏感的机器学习仍然仅需要较少的时间开销,同时此机器学习被限定在热函数中,不但进一步缩小学习范围而且使学习热点更突出。 3.介绍如何基于ORC编译器构建溢出代码敏感的机器学习和溢出代码与热函数敏感的机器学习平台。并就这两种方法针对CPU2000这样的大型程序对ORC编译器中的寄存器分配进行了学习,其实验数据分析表明了这两种学习方法的有效性。 4.为了衡量不同基于静态分析的机器学习,我们提出了机器学习衡量模型effect。主要考虑两方面因素:适应值的变化和相应性能的变化。并就CPU2000的机器学习结果进行了衡量和分析。 5.为进一步弄清参与机器学习的各个优化因素在编译优化中的重要性和相互之间的关系,本文提出了基于粗糙集理论的机器学习信息挖掘。研究的目标为机器学习中生成的中间文件,其包含作为遗传基因的表达式及其相应的适应值。借助粗糙集理论中的