迭代编译是近年来针对高性能体系结构程序性能优化领域的一个新的研究热点。但迭代编译优化过程中变换参数及变换集的选取、变换的实施顺序和实施次数等,均导致一个巨大的优化空间,如何在巨大优化空间内快速选择最优的程序版本,是使得迭代编译切实可行的关键。针对此,本项目研究基于多面体模型的迭代编译优化方法,通过多面体表示技术对程序变换进行结构化编码,简化变换序列的复杂度,降低搜索空间的规模,更好地理解搜索空间的结构,并从优化空间修剪、搜索算法、优化空间划分、程序变换表示、优化框架等多方面出发,建立可有效集成多面体表示技术与迭代编译机制的自适应优化框架,提高程序对不同平台的适应性和性能的鲁棒性,并在性能优化效果和开销间取得很好的折中。
performance optimization of programs;auto-tuning;search algorithm;iterative compilation;polyhedral model
本项目研究基于多面体模型的迭代编译优化方法,以提高程序对不同平台的适应性和性能的鲁棒性,在性能优化效果和开销间取得很好的折中。项目主要成果包括(1)提出一种基于代码隔离的大程序迭代编译优化方法,结合代码隔离技术,从大应用程序中分离出若干以循环结构为主、性能不相关或相关度较低的核心代码片断,逐个对其进行迭代编译优化搜索,可将一个高维的优化空间转换为多个低维优化空间,降低迭代编译优化开销。(2)提出一种结合多面体模型和性能模型的迭代编译优化框架,集成了多面体模型和模型指导的迭代编译技术,自动进行非参数化的代码变换、模型指导的参数化代码变换以及自动参数搜索。测试结果表明该方法可以对复杂的循环嵌套生成高效的代码,产生的性能收益远远超过本地编译器,而且性能优化效果明显优于当前基于多面体模型的循环变换系统和迭代编译技术。(3)设计多种优化参数搜索算法,测试表明基于爬山算法的优化参数搜索算法和基于模拟退火算法的优化参数搜索算法相对于其他算法有较高的稳定性和有效性,性能大大超过了其他两种算法,且基于模拟退火算法的优化参数搜索算法在基于爬山算法的优化参数搜索算法基础上的优化也被证明是有效的。(4)提出一种结合静态分析和经验搜索程序性能的优化方法。通过研究程序特征分析技术,分析程序特点,以寻找适合程序特征的程序变换技术;基于程序特征分析结果,对程序进行静态优化。最后,利用遗传算法对程序进行优化参数的经验搜索。实验结果验证了优化方法的有效性。(5)提出一种量化使用本地内存对多核处理器性能影响的性能建模方法,定量分析多核/众核处理器中本地内存的性能影响,避免实施性能收益较小的自适应经验优化方法,或者粗略预测优化方法的性能增益。(6)提出一种面向OpenCL内核的自适应优化方法Grover,自动将OpenCL内核变换为不使用本地内存,通过在平台上实际运行两种版本的OpenCL内核,自动选择平台上的最优性能版本。测试结果表明通过Grover可以将程序性能提升至少1/3,是一种面向OpenCL内核的自适应优化方法。(7)提出一种面向众核处理器的程序性能优化框架Sesame。程序员提供并行化代码作为Sesame的输入,Sesame对该代码应用最适合的体系结构相关的性能优化技术,并为不同平台生成最优的内核版本。实验结果表明该优化框架可以有效提高程序性能。