程序向量化中非规则访存问题研究
2015-01-01徐金龙赵荣彩李晓亮
计算机工程 2015年12期
徐金龙,赵荣彩,刘 鹏,李晓亮
(1.数学工程与先进计算国家重点实验室,郑州450001;2.解放军93010部队,沈阳110000)
1 概述
目前多数通用处理器上已经集成了SIMD(Single Instruction Multiple Data)扩展[1-4]。为了方便有效地使用这种向量并行部件,大部分编译器也都集成了自动向量化模块[5-7]。为了实现更多程序的向量化,出现了很多面向向量化的分析方法,这些方法基本原理是依据数据依赖关系寻找可并行的语句,然后将可并行的语句用向量方式并行执行[8]。
向量化是一种细粒度的并行化,不仅需要依赖关系满足并行需求,对访存模式也有较苛刻的要求。目前,多数编译器自动向量化模块仅支持连续访存模式。大量访存模式较复杂的循环,编译器直接放弃对其进行向量化。GCC(GUN Compiler)和ICC(Intel C++Compiler)的向量化模块都尝试支持某些不太复杂的访存模式。GCC最初向量化模块只支持loop-based向量化方法,某些伪跨幅访存不能被正确识别,伪跨幅访存是指:语句被孤立分析时,访存不连续,但考虑迭代内并行其访存是连续的,因此,GCC引入了SLP算法发掘迭代内并行,解决了伪跨幅访存的问题[9]。ICC提供了一种高效的向量化方法来专门处理访存跨幅为2的幂的情况[10],并改进了数据重组方式,可以充分利用Intel处理器提供的跨幅访存指令。需要指出的是,GCC实际上并未支持跨幅访存的向量化,它仅仅是在迭代内发现了连续的访存,ICC真正支持了跨幅访存,但它支持的模式过于单一,难以支持较复杂的跨幅访存,不具有通用性,也不能支持程序中普遍存在的非规则访存。……
登录APP查看全文
