面向循环并行化的软件重构方法研究与实现
发布时间:2020-09-16 20:32
随着多核处理器的发展,多线程编程在提高软件服务质量方面扮演了愈发重要的角色。循环结构在蕴含了丰富并行性的同时,因自身的复杂性及多样性,成为软件执行过程中最耗时的部分。因此,如何实现循环结构的并行化成为高性能计算的研究热点。本文提出了一种面向循环并行化的软件自动重构方法,并在Eclipse JDT环境下,结合抽象语法树分析方法设计实现了自动重构工具R-Loop。本文的主要研究内容如下:1)循环的并行化分析与实现。首先对循环结构进行规范化约束,并对循环数据依赖、循环控制依赖等依赖关系进行分析,同时根据各自的成因及特点,对上述依赖进行消除。然后在确保访问安全的前提下,通过添加与线程相关的操作实现Executor机制下的循环并行化。最后对程序执行时间、加速比进行验证,为自动重构提供理论基础。2)面向循环并行化的自动重构。结合软件静态分析方法对重构的转换逻辑、前置条件等进行设置,通过抽象语法树分析方法将源程序解析成抽象树状结构,确定源程序中各变量与抽象语法树中各节点的对应关系。通过对不同节点的增加、删除、修改等操作实现循环并行化的自动重构。3)自动重构工具的设计与实现。依据循环并行化重构方法,在Eclipse JDT环境下,设计实现自动重构工具R-Loop,同时详细展示了该工具的实现过程和预览界面。最后选取Java Grande Forum基准测试套件中的Crypt、Lufact、Series、SOR、SparseMatmulti以及MonteCarlo程序对R-Loop进行重构功能测试。结果表明,R-Loop可以在较短的时间内完成for型循环的自动并行化转换,同时可以保证重构前后程序外部可观测行为的一致性、正确性,一定程度上提高了程序的执行效率。
【学位单位】:河北科技大学
【学位级别】:硕士
【学位年份】:2019
【中图分类】:TP332
【部分图文】:
图 2-2 并行设计的两种形式行化重构步骤重构对象的不同,重构又可以化分为对象化重构、模型重构、面向方。在实际重构过程中,不同类型对应了不同的重构依据及重构策略。致分为以下五个步骤:理解源代码,确定重构位置 重构开始之前首先需要对源代码进行理握其内部结构之间的关联关系后,确定出重构扩展点位置。其中针对,如变量名更换等可以由人工进行分析,根据变量对象之间的关系确口。但对于较为复杂的重构,单靠人工分析很难准确定位到重构片段要借助软件分析工具进行辅助。分解执行的任务或数据 重构扩展点位置确定后,根据硬件线程与软,对执行的任务或数据进行分解、划分,使每个线程并行执行的任务的片段。具体分解步骤见本章 2.2 节,当两个或两个以上的线程同时访址,且至少有一个线程为写操作时,会引发数据竞争问题而导致并行
化是循环并行化过程中的关键步骤,其目的迭代次数,确保能够将循环迭代分布在中,仅依靠循环形式规范化是远远不够的还需要结合软件静态分析方法,对可能引处理。系问而导致的数据竞争问题是阻碍串行程序行化过程中,循环迭代之间依赖关系的存此有必要对依赖关系进行分析,按照依赖环数据依赖两种形式[56]。依赖是指当前循环中的控制条件依赖于前依赖是指在程序执行过程中,存在两个或位置,且至少有一个为写操作。根据数据
比产生很大的负面影响。因此,在对循环进行并行化操作潜在的依赖关系,根据依赖关系的成因及特点进行消除,部分,提高程序可并行化占比。赖关系消除并行化过程中,一般要先保证程序的正确性,其次才是提高化分析的过程即依赖关系的消除过程,由于不同形式的依消除方法,正确匹配消除方法与消除形式是循环并行化的关串行程序的并行化时,首先要考虑程序中语句上下文之间的语句是否存在控制依赖的情况,并对这种依赖关系进行消码中,语句 S2 中的 a[i-1]依赖于前一次循环迭代中的语句 S义,语句 S2 控制依赖于语句 S1。针对循环控依赖,本文采。在示例中,分别定义了两个临时寄存器变量 temp 和 next,入的 a[i]值,如图 3-2 右侧示例代码所示,if 循环中的控制除了循环迭代的控制依赖。
本文编号:2820342
【学位单位】:河北科技大学
【学位级别】:硕士
【学位年份】:2019
【中图分类】:TP332
【部分图文】:
图 2-2 并行设计的两种形式行化重构步骤重构对象的不同,重构又可以化分为对象化重构、模型重构、面向方。在实际重构过程中,不同类型对应了不同的重构依据及重构策略。致分为以下五个步骤:理解源代码,确定重构位置 重构开始之前首先需要对源代码进行理握其内部结构之间的关联关系后,确定出重构扩展点位置。其中针对,如变量名更换等可以由人工进行分析,根据变量对象之间的关系确口。但对于较为复杂的重构,单靠人工分析很难准确定位到重构片段要借助软件分析工具进行辅助。分解执行的任务或数据 重构扩展点位置确定后,根据硬件线程与软,对执行的任务或数据进行分解、划分,使每个线程并行执行的任务的片段。具体分解步骤见本章 2.2 节,当两个或两个以上的线程同时访址,且至少有一个线程为写操作时,会引发数据竞争问题而导致并行
化是循环并行化过程中的关键步骤,其目的迭代次数,确保能够将循环迭代分布在中,仅依靠循环形式规范化是远远不够的还需要结合软件静态分析方法,对可能引处理。系问而导致的数据竞争问题是阻碍串行程序行化过程中,循环迭代之间依赖关系的存此有必要对依赖关系进行分析,按照依赖环数据依赖两种形式[56]。依赖是指当前循环中的控制条件依赖于前依赖是指在程序执行过程中,存在两个或位置,且至少有一个为写操作。根据数据
比产生很大的负面影响。因此,在对循环进行并行化操作潜在的依赖关系,根据依赖关系的成因及特点进行消除,部分,提高程序可并行化占比。赖关系消除并行化过程中,一般要先保证程序的正确性,其次才是提高化分析的过程即依赖关系的消除过程,由于不同形式的依消除方法,正确匹配消除方法与消除形式是循环并行化的关串行程序的并行化时,首先要考虑程序中语句上下文之间的语句是否存在控制依赖的情况,并对这种依赖关系进行消码中,语句 S2 中的 a[i-1]依赖于前一次循环迭代中的语句 S义,语句 S2 控制依赖于语句 S1。针对循环控依赖,本文采。在示例中,分别定义了两个临时寄存器变量 temp 和 next,入的 a[i]值,如图 3-2 右侧示例代码所示,if 循环中的控制除了循环迭代的控制依赖。
【参考文献】
相关期刊论文 前4条
1 张杨;张冬雯;仇晶;;面向Java锁机制的字节码自动重构框架[J];计算机科学;2015年11期
2 钱巨;张磊;徐宝文;;一种基于差异分散化的错误定位方法[J];计算机学报;2015年09期
3 闵洪波;徐宝文;钱巨;;基于程序依赖图的Aspect挖掘技术[J];东南大学学报(自然科学版);2008年02期
4 潘双夏,徐有忠,冯培恩,姜少飞,段福斌;面向并行设计的特征识别与模型重构方法[J];计算机辅助设计与图形学学报;2003年08期
相关硕士学位论文 前1条
1 柳晨光;面向多线程机制的软件重构方法研究与实现[D];河北科技大学;2016年
本文编号:2820342
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/2820342.html