论文摘要
近年来,多媒体产业的迅猛发展促使通用微处理器体系结构中多媒体扩展的兴起,并由此促进了编译技术中自动向量化技术的研究和发展。然而随着多媒体扩展对浮点操作的支持,以及日趋成熟的针对非多媒体程序的并行性发掘,利用多媒体扩展对非多媒体程序的向量化已成为提高这些程序性能的一个重要手段。但是和多媒体程序相比,非多媒体程序的程序特征更加多样化,并且存在大量的非连续和非对齐的数据引用方式,严重影响程序的向量化发掘和向量化性能。本文将首次对典型的非多媒体程序SPEC CPU2000浮点程序进行单指令多数据流(SIMD)的向量化特征分析,并通过多种主流编译器对其的自动向量化性能的测试,分析当前向量化技术的缺陷;并由此提出几种改进方法:基于局部数据重组的SIMD向量化方法、针对外层循环的向量化方法和内层部分语句的SIMD向量化方法。通过这些改进方法使原有的向量化方法更加适用于非多媒体程序的特征,从而广泛的加速非多媒体程序的性能。本文对这几种改进方法在Pathscale编译上下都进行了实现,并在Alpha平台下进行了测试;同时也在AMD Operton平台下通过手工改写代码,和Intel编译器进行向量化的性能对比。在向量化改进算法的实现框架中加入了对齐分析优化、选择适当循环等SIMD向量化预优化部分,帮助向量化模块对程序进行更加高效的向量化的发掘。本文的工作有以下的创新之处:第一:本文提出了两种针对传统向量化算法的改进方法,使其能够对内层含有依赖环的循环嵌套进行向量化,而且能够像超字并行(SLP)算法那样对基本块内的语句进行指令级的SIMD向量化。传统向量化仅能实现最内层循环的SIMD向量化,因此当最内层循环出现依赖环时会导致整个循环嵌套都不能被向量化;SLP向量化方法也无法实现内层循环有依赖环的循环的向量化。与同类研究相比,本文提出的方法在保持原有SIMD传统向量化能力的同时,能够避开最内层循环的依赖环的限制,并依次对外层循环进行判断其向量化的可行性,并提出代价模型计算SIMD向量化的性能收益,从而选取适当的SIMD向量化策略,生成SIMD向量化代码;同时能规避复杂的SLP的向量指令选择策略,匹配适当的语句,进行小范围的部分语句的SLP向量化。第二:提出一种针对含多维指针、结构体数组等数据结构的循环的SIMD向量化方法。现有的SIMD向量化方法都无法处理这些循环结构,而通过简单的循环变换更是无法帮助这些循环被向量化。本文提出面向SIMD向量化的局部数据重组方法,通过局部的数据重组改变数据布局,使不连续的数据访存变为连续的数据访存,从而实现循环的SIMD向量化。和同类研究相比,本文提出的方法第一次对含有多维指针、结构体数组等数据结构的循环提出了SIMD向量化的解决方法,并给出完备的代价模型进行评估局部数据重组的收益。第三:提出了针对SIMD向量化的预优化技术。为避免为SIMD向量化而进行的盲目的循环变换和标量优化,本文提出对待向量化循环进行预先估算其向量化收益,从而减少SIMD向量化模块处理的循环数量,节省机器资源,并防止某些不可逆的程序变换;同时本文进行了为提高SIMD向量化性能的对齐分析和优化策略。和同类的研究相比,本文首次明确提出对待向量化循环进行收益预计算,从而在实际向量化分析和变换之前就能够对循环的可向量化有一个预估,避免了盲目的SIMD的优化;同时提出了完备的对齐分析和优化算法,对各种对齐优化策略组合使用,从而最大限度的确定循环中数据的对齐信息。
论文目录
相关论文文献
标签:向量化论文; 非多媒体程序论文; 局部数据重组论文; 外层循环的向量化论文; 部分语句的向量化论文; 对齐分析论文; 对齐优化论文;