多线程多SIMD自动向量化技术研究
【摘要】:当前,主流通用微处理器都已经实现了多核并行以及处理器核内的SIMD并行。多线程并行且每个线程尽可能地利用SIMD并行是充分开发此类微处理器性能的必然选择。多核多SIMD体系结构的发展需要与之相适应的编程模型和编译优化技术。本文研究多线程多SIMD并行下的自动向量化技术。OpenMP编程接口和编译实现是广泛使用的多线程并行机制,典型编译器都可以在支持OpenMP并行的同时实现面向SIMD的自动向量化,但是效果还不是很理想。本文首先介绍了面向SIMD并行的自动向量化技术,基于GCC编译器剖析了自动向量化编译框架,并详细分析了自动向量化的实现过程。其次,通过对典型并行循环的测试分析,发现GCC目前已支持多种多线程并行下的自动向量化,但是对于一些赋值类循环,编译结果显示不能进行自动向量化。之后,针对GCC编译器的OpenMP编译实现和自动向量化编译实现,本文分析了OpenMP编译实现过程,着重分析了GCC编译器的自动向量化代价模型。自动向量化代价模型抽象出了自动向量化所要考虑的诸多因素。通过分析,发现GCC中自动向量化及代价模型对多线程程序的数据对齐属性判断不准确,导致自动向量化代价模型对多线程程序的代价计算不够准确,影响了一些赋值类循环在多线程下的自动向量化。最后,实现了基于数据对齐属性指导的GCC自动向量化优化。扩展了OpenMP指导命令,添加了指导数据对齐属性的子句(aligned)。通过修改OpenMP编译的前端和中端,将数据对齐属性传递到编译器的自动向量化阶段,使自动向量化代价计算更加准确,针对一些循环实现了多线并行的同时也能自动向量化。实验表明,本文的工作针对嵌套赋值循环有比较好的加速效果。
【关键词】:多线程 多SIMD 自动向量化 Open MP GCC 数据对齐属性指导子句
【学位级别】:硕士
【学位授予年份】:2013
【分类号】:TP314;TP332