论文部分内容阅读
SIMD扩展部件是一种广泛存在于主流处理器芯片中的向量加速器件,是构建当代计算机系统的重要组成,能有效提升各种应用的处理效能。自动向量化编译作为一种构造向量程序的主要手段,已得到广泛的研究并在各种主流编译系统中予以实现。然而,当前自动向量化编译仅能处理规则访存模式的应用,对含有复杂非规则访存模式的各种新型应用,尚缺乏有效的处理能力。针对自动向量化编译面临的挑战,本文依循自动向量化的向量挖掘、优化与代码生成过程,开展面向非规则应用的自动向量化编译优化技术研究,对非规则应用的向量化挖掘、访存优化以及非规则数据访问的向量指令生成深入研究,主要工作和贡献如下:(1)非规则应用的向量化挖掘。现有编译器的自动向量化能够对规则应用给出精准的数据分析,从而指导程序进行向量代码的转换。非规则应用中同样蕴含着向量并行执行的机会,但由于其访存不连续或者依赖于输入数据,使得编译器在编译阶段无法建立准确的数据引用关系,因而放弃其向量化的机会。因此本文以Inspector/Executor模型为基础,提出基于Inspector的非规则数据访存模式识别,在计算之前对非规则应用的访存模式进行预分析,并且针对不规则规约操作存在向量写冲突的问题,提出非规则数据的向量打包策略,将不同的迭代打包成向量,解决非规则应用的向量挖掘的问题。(2)非规则应用的访存优化技术研究。非规则应用中,访存不连续性和随机性使得程序数据局部性较差,访存效率较低。因此为了提高非规则应用的访存效率,本文提出分层分块算法,提高数据局部性。其次提出基于访存记录的数据预取算法,以隐藏内存访问的延迟。最后提出基于最大匹配度的向量寄存器重用,以减少程序访存次数,提升程序执行效率。(3)非规则数据访问的向量指令生成。SIMD扩展指令可以将内存中连续的数据一次性的加载到向量寄存器中。但是对于非规则应用的数据访问随机性,可能使向量包内同构语句的数量小于向量化因子,并且一次向量加载指令不能将非规则数据加载到向量寄存器中去,所以需要对向量寄存器的部分使用以及非规则数据访问的向量代码生成展开研究。因此本文提出不充分向量化以及非规则向量访存的实现方案。最后提出代价模型的计算,以选择最优方案对程序进行向量变换。为验证本文提出方法的正确性和有效性,以GCC5.3.0编译器为基础实现了本文提出的算法。通过对选择的程序进行测试,本文的研究能提升SIMD扩展部件的加速效能,对于编译系统的研制以及应用程序的优化存在一定的指导意义。