循环变换技术在自动向量化中的应用研究
发布时间:2020-07-13 06:55
【摘要】:近年来,随着多媒体应用的迅速发展,很多高性能微处理器都采用了SIMD扩展技术。SIMD扩展技术缺少统一的指令描述规范,程序员不仅需要对程序的结构有较为深刻的认识,而且要掌握目标平台支持的扩展体系结构和指令集的特点,对程序员来说编写SIMD程序是具有挑战性的工作,因此当前编译技术中的自动向量化就是解决这个问题的一个重要方法。 自动向量化需要编译器能够充分分析原程序的特点,将其中可向量化的循环或语句块转换成语义等价的SIMD指令。本文针对当前的主流编译器在自动向量化方面的缺点,结合传统的循环变换方法,深入研究了可以提升自动向量化效率的循环变换技术。首先,以数据依赖关系分析为基础,分析了程序中语句向量化的合法性,设计实现了语句向量化识别算法及基于语句向量化识别的循环分布算法。第二,针对SIMD体系结构中标量部件与向量部件可并行工作的特点,研究了基于混合并行的循环变换技术,设计实现了一种简单通用的循环选择合并算法,并针对合并不成功或性能不能达到预期效果的情况,提出了相应的分段展开变换策略,提高了系统的硬件资源利用率。第三,针对自动向量化变换在处理复杂应用程序所存在的不足,研究了基于信息识别的交互式变换方法,设计实现了一种交互式的循环变换调优框架。在该框架结构内,通过分析应用程序的特点,采用可视化动静态编译信息的方法,为用户提供一个高效的渐近式SIMD交互调优环境。 本文研究的循环变换方法在自动向量化项目SW-VEC中进行实现,测试结果表明,使用本文的自动变换方法对SPEC CPU2000浮点测试集中几个向量化较好的测试程序性能平均有10%左右的提升,从而验证了本文提出的方法可以提升向量化识别率并能够得到较高的加速比。同时,测试结果表明,通过交互式的循环变换方法,可以弥补自动向量化中难以处理的复杂情况,进一步提高编译器的向量化能力。
【学位授予单位】:解放军信息工程大学
【学位级别】:硕士
【学位授予年份】:2011
【分类号】:TP338
【图文】:
交互工具完整的信息文件(*.outinfo.xml)显示模块源码SIMD代码编译信息分析添加帮助信息用户交互式变换交互结束转换图 25 交互信息的使用过程交互信息的输出要符合程序员的认知习惯,首先要定位到程序的行号,告诉程序员,当前的信息所处的位置,程序员可结合程序源码、向量化后的代码、循环信息对程序作进一步的判断,从而选择较有利的循环变换方法,以提高程序向量化的性能。输出的图形界面如下图所示:
信息工程大学硕士学位论文样,因此,单纯的加速比对比也不能很好的说明问题。5.4 交互式变换的实现与测试变换式变换的过程中,需要针对程序的特点进行变换,在此主要针对SPEC2000说明本文提到的交互式向量化对程序的识别情况,由于此测试例子比较复杂,不同的程序员对程序的理解不一样,针对一些常用的应用,列出经过交互变换后程序的加速比改进情况。5.4.1 交互式变换的实现交互式变换将自动向量化工具与用户有机的结合了起来,实现是就应该在一个平台上将各方面的信息结合起来显示出来,供用户参考,同时也可将用户在应用层的信息输出交给编译器去识别处理。因此课题设计了如下的交互式变换模式,如下图所示:
第 71 页图 33 交互式变换对 swim程序段的识别从上图33中可以看出,针对此循环编译信息输出的内容为数组VNEW、PNEW、UNEW的存取不连续,无法向量化,帮助信息显示的内容是循环最内层的索引变量出现在数组的非最后一维的位置,即没有按照数组的存储结构来存取数据,因而造成数据存取不连续。C程序中的数组存储结构与逻辑结构相同,按照行优先的顺序进行存储,而Fortran程序中的数组存储结构与C不同,按照列优先的顺序来进行存储,即从数组逻辑上的高维到低 维 的 顺 序 存 储 。 为 了 简 单 的 说 明 , 假 设 MNMIN=3 , 则 上 例 中 数 组PNEW(ICHECK,JCHECK)的读取顺序与存储顺序可用下图来说明:PNEW(1,1) PNEW(1.2) PNEW(1,3)PNEW(2,1)PNEW(3,1)PNEW(2,2) PNEW(2,3)PNEW(3,2) PNEW(3,3)PNEW(1,1) PNEW(2,1) PNEW(3,1) PNEW(1,2) PNEW(2,2) PNEW(3,2) PNEW(1,3) PNEW(2,3) PNEW(3,3)PNEW(1,1) PNEW(1,2) PNEW(1,3) PNEW(2,1) PNEW(2,2) PNEW(2,3) PNEW(3,1) PNEW(3,2) PNEW(3,3)逻辑结构行列存储结构读取顺序图 34 swim 程序段的数据逻辑结构、存储结构、读取顺序及相互关系从上图可以看出
本文编号:2753130
【学位授予单位】:解放军信息工程大学
【学位级别】:硕士
【学位授予年份】:2011
【分类号】:TP338
【图文】:
交互工具完整的信息文件(*.outinfo.xml)显示模块源码SIMD代码编译信息分析添加帮助信息用户交互式变换交互结束转换图 25 交互信息的使用过程交互信息的输出要符合程序员的认知习惯,首先要定位到程序的行号,告诉程序员,当前的信息所处的位置,程序员可结合程序源码、向量化后的代码、循环信息对程序作进一步的判断,从而选择较有利的循环变换方法,以提高程序向量化的性能。输出的图形界面如下图所示:
信息工程大学硕士学位论文样,因此,单纯的加速比对比也不能很好的说明问题。5.4 交互式变换的实现与测试变换式变换的过程中,需要针对程序的特点进行变换,在此主要针对SPEC2000说明本文提到的交互式向量化对程序的识别情况,由于此测试例子比较复杂,不同的程序员对程序的理解不一样,针对一些常用的应用,列出经过交互变换后程序的加速比改进情况。5.4.1 交互式变换的实现交互式变换将自动向量化工具与用户有机的结合了起来,实现是就应该在一个平台上将各方面的信息结合起来显示出来,供用户参考,同时也可将用户在应用层的信息输出交给编译器去识别处理。因此课题设计了如下的交互式变换模式,如下图所示:
第 71 页图 33 交互式变换对 swim程序段的识别从上图33中可以看出,针对此循环编译信息输出的内容为数组VNEW、PNEW、UNEW的存取不连续,无法向量化,帮助信息显示的内容是循环最内层的索引变量出现在数组的非最后一维的位置,即没有按照数组的存储结构来存取数据,因而造成数据存取不连续。C程序中的数组存储结构与逻辑结构相同,按照行优先的顺序进行存储,而Fortran程序中的数组存储结构与C不同,按照列优先的顺序来进行存储,即从数组逻辑上的高维到低 维 的 顺 序 存 储 。 为 了 简 单 的 说 明 , 假 设 MNMIN=3 , 则 上 例 中 数 组PNEW(ICHECK,JCHECK)的读取顺序与存储顺序可用下图来说明:PNEW(1,1) PNEW(1.2) PNEW(1,3)PNEW(2,1)PNEW(3,1)PNEW(2,2) PNEW(2,3)PNEW(3,2) PNEW(3,3)PNEW(1,1) PNEW(2,1) PNEW(3,1) PNEW(1,2) PNEW(2,2) PNEW(3,2) PNEW(1,3) PNEW(2,3) PNEW(3,3)PNEW(1,1) PNEW(1,2) PNEW(1,3) PNEW(2,1) PNEW(2,2) PNEW(2,3) PNEW(3,1) PNEW(3,2) PNEW(3,3)逻辑结构行列存储结构读取顺序图 34 swim 程序段的数据逻辑结构、存储结构、读取顺序及相互关系从上图可以看出
【参考文献】
相关期刊论文 前2条
1 曾扬;循环分布及依赖关系破除的优化问题[J];计算机学报;1993年06期
2 陈文光,杨博,王紫瑶,郑丰宙,郑纬民;一个交互式的Fortran77并行化系统[J];软件学报;1999年12期
相关博士学位论文 前1条
1 李玉祥;面向非多媒体程序的SIMD向量化方法及优化技术研究[D];中国科学技术大学;2008年
本文编号:2753130
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/2753130.html