面向非多媒体程序的SIMD向量化方法及优化技术研究

面向非多媒体程序的SIMD向量化方法及优化技术研究

论文摘要

近年来,多媒体产业的迅猛发展促使通用微处理器体系结构中多媒体扩展的兴起,并由此促进了编译技术中自动向量化技术的研究和发展。然而随着多媒体扩展对浮点操作的支持,以及日趋成熟的针对非多媒体程序的并行性发掘,利用多媒体扩展对非多媒体程序的向量化已成为提高这些程序性能的一个重要手段。但是和多媒体程序相比,非多媒体程序的程序特征更加多样化,并且存在大量的非连续和非对齐的数据引用方式,严重影响程序的向量化发掘和向量化性能。本文将首次对典型的非多媒体程序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的优化;同时提出了完备的对齐分析和优化算法,对各种对齐优化策略组合使用,从而最大限度的确定循环中数据的对齐信息。

论文目录

  • 摘要
  • ABSTRACT
  • 目录
  • 图目录
  • 表目录
  • 第1章 绪论
  • 1.1 研究背景
  • 1.1.1 SIMD扩展及其应用
  • 1.1.2 SIMD扩展上的向量化方法
  • 1.1.3 非多媒体程序对SIMD向量化方法提出新的挑战
  • 1.2 相关工作
  • 1.2.1 传统的向量化方法
  • 1.2.2 超字并行
  • 1.2.3 对齐分析和优化
  • 1.2.4 其他
  • 1.3 课题研究内容
  • 1.3.1 课题意义
  • 1.3.2 课题主要研究和创新
  • 1.3.3 课题研究平台
  • 1.4 论文结构
  • 第2章 非多媒体应用的程序特征
  • 2.1 SPEC CPU2000测试集合
  • 2.2 各种编译器对SPEC CPU2000的自动向量化
  • 2.3 SPEC CPU2000的核心循环特征
  • 2.3.1 核心循环的向量化特征
  • 2.3.2 影响SIMD向量化的四大要素
  • 2.3.3 被向量化的核心循环的特征
  • 2.3.4 未被向量化的核心循环的特征
  • 2.4 小结
  • 第3章 传统向量化方法的改进
  • 3.1 研究动机
  • 3.2 对比相关工作
  • 3.3 改进算法的实现框架
  • 3.3.1 算法思想
  • 3.3.2 实现框架
  • 3.3.3 面临的难题
  • 3.4 SIMD并行性分析
  • 3.4.1 构造语句依赖图
  • 3.4.2 SIMD并行性分析
  • 3.5 SIMD收益分析
  • 3.5.1 基本块做为分析单位
  • 3.5.2 基本块并行性方案选择
  • 3.5.3 SIMD的代价模型
  • 3.6 SLP和VP相结合的算法
  • 3.6.1 部分SLP向量化
  • 3.6.2 选取候选语句
  • 3.6.3 SLP向量化策略
  • 3.7 SIMD向量化变换
  • 3.7.1 循环结构变换
  • 3.7.2 SIMD操作的生成
  • 3.8 测试结果和分析
  • 3.9 小结
  • 第4章 基于局部数据重组的SIMD向量化方法
  • 4.1 研究动机
  • 4.2 对比相关工作
  • 4.3 算法的实现框架
  • 4.3.1 算法的核心思想
  • 4.3.2 实现的框架
  • 4.3.3 面临的难题
  • 4.4 合法性分析
  • 4.5 收益性分析
  • 4.5.1 向量化收益
  • 4.5.2 局部数据重组的收益分析
  • 4.6 重组方案
  • 4.6.1 基本方案
  • 4.6.2 调整方案
  • 4.7 重组变换
  • 4.8 测试结果和分析
  • 4.9 小结
  • 第5章 SIMD向量化的预优化
  • 5.1 研究动机
  • 5.2 对比相关工作
  • 5.3 选择适当的循环
  • 5.3.1 判断条件
  • 5.3.2 测试结果
  • 5.3.3 结论
  • 5.4 对齐分析和优化
  • 5.4.1 对齐分析
  • 5.4.2 对齐优化
  • 5.4.3 测试结果
  • 5.4.4 结论
  • 5.5 小结
  • 第6章 结束语
  • 6.1 全文总结
  • 6.2 未来的研究方向
  • 参考文献
  • 在读期间完成的学术论文
  • 在读期间参加的研究项目
  • 致谢
  • 相关论文文献

    标签:;  ;  ;  ;  ;  ;  ;  

    面向非多媒体程序的SIMD向量化方法及优化技术研究
    下载Doc文档

    猜你喜欢