自动改进程序编译中的并行处理的方法及其系统的制作方法_4

文档序号:8344591阅读:来源:国知局
对于每个过程运行,维 护两个栈:一个记录AST运行(前序遍历)状态,而另一个包含"调用"树中过程的名字。对 于递归过程,一系列过程的名字-名字集合-其调用(直接地或间接地)全局过程表条目。 对于还没有标记为被递归的每个全局过程表条目:
[0061] 1、将过程名字推入到调用栈内。
[0062] 2、由于过程节点发生冲突,检查(a)节点是否是对全局过程表条目的递归调用, 如果是,将表条目标记为递归并将名字栈的内容添加到集合中;(b)检查过程是否已经被 标记为递归,如果是,继续下一步;(c)检查节点是否呈现在名字栈中,将相关全局过程表 条目标记为递归并继续下一步。否则:如果节点不是过程节点,继续下一步;如果是过程节 点,将当前AST运行状态推入到状态栈中。将发生冲突的过程名字推入到调用栈中;在表中 查找过程AST,并开始运行过程AST。
[0063] 3、一旦完成AST运行,取出调用栈的栈顶部分,取出状态栈的栈顶部分,并从状态 栈取出的项目中恢复调用树的处理。
[0064] -旦所有节点都被标记,就对递归函数进行重写以删除递归。与前述相同,维护两 个栈
[0065] 1、运行树,复制节点直到遇到递归过程节点。
[0066] 2、递归节点发生冲突时(除了引用全局过程表条目),检查全局过程表条目是否 在发生冲突的过程的名字集合中;如果在,则保存状态,为冲突的过程插入一个标记,并且 开始运行冲突节点的AST。如果不在,复制节点并继续下一步。
[0067] 3、对于全局过程表或调用栈的一个元素的引用:
[0068] a、创建唯一的数字标识;将"把标识添加到栈中;转向相关标识"的等价物添加到 AST中
[0069] b、继续将节点添加到一个与标识相关的新的"连续"AST中。如果在前转条件 (forward conditional)语句中,则不复制该可选择项;如果在一个循环语句中,则适当地 重写循环(部分地展开,具有嵌套循环一一 "前"环(the〃bef〇re〃l〇〇p)、递归过程调用和 "后"环(the"after"loop))。
[0070] c、一旦返回到全局过程表格条目,则继续将标识的树添加到当前作出的选择的后 面(如果不在前转条件中则结束树);作出的下一个选择被添加到新表条目AST中,然后节 点被添加到标识的树和新表条目AST两者中。
[0071] d、表格条目过程运行完成后,处理识别的连续AST;会添加一个下面形式的尾部
[0072]
【主权项】
1. 一种由编译器执行的改进程序链接过程中的并行处理的程序编译的计算机实现方 法,该方法包括: 将程序语句转换为标准格式; 为程序中的每个过程构建抽象系统树(AST);并且 遍历该程序以构建函数数据流图,其中以节点表示赋值语句或函数调用,以第一节点 集合表示控制流判定或者以第二节点集合表示数组或集合; 识别函数数据流图中的能够并行执行的至少一个循环;以及 通过重新建立函数数据流图中节点间的连接来将该至少一个循环转换为集合运算。
2. 如权利要求1所述的方法,进一步包括: 识别递归过程;以及 将递归过程扩展来为递归过程的AST表示中的每个递归提供节点。
3. 如权利要求1所述的方法,进一步包括: 识别间接过程调用;以及 将间接过程调用转换为AST中的转换结构。
4. 如权利要求1所述的方法,其中遍历进一步包括: 将程序的主过程的AST中建立的各过程展开以合并程序中表示每个次级过程的AST。
5. 如权利要求1所述的方法,进一步包括: 创建全局变量的初始值表格。
6. 如权利要求1所述的方法,进一步包括: 创建表示初始全局变量值的节点;以及 增加所述表示初始全局变量值的节点作为用于AST的输入节点。
7. 如权利要求1所述的方法,进一步包括: 创建全局过程表以引用程序的每个过程和相关AST。
8. 如权利要求1所述的方法,其中构建抽象系统树包括: 解析程序代码以识别管理选择语句的控制结构;以及 将每个控制结构转换为具有条件函数和选择语句的子图,选择语句被表示为图中后面 合并和循环的分离路径。
9. 如权利要求8所述的方法,进一步包括: 通过将子图结构的输入和输出接口链接到函数数据流图中的周围节点上而将子图结 构链接到函数数据流图中。
10. 如权利要求1所述的方法,进一步包括: 将程序的函数数据流图输出到编译器中以指导程序的并行编译。
11. 一种存储有指令的非暂时性的机器可读介质,该指令被计算机系统执行时执行由 编译器执行的改进程序链接过程中的并行处理的程序编译的方法,该方法包括: 将程序语句转换为标准格式; 为程序中的每个过程构建抽象系统树(AST);并且 遍历该程序以构建函数数据流图,其中以节点表示赋值语句或函数调用,以第一节点 集合表示控制流判定或者以第二节点集合表示数组或集合; 识别函数数据流图中的能够并行执行的至少一个循环;并且 通过重新建立函数数据流图中节点间的连接来将该至少一个循环转换为集合运算。
12. 如权利要求11所述的非暂时性的机器可读介质,进一步包括: 识别递归过程;以及 将递归过程扩展来为递归过程的AST表示中的每个递归提供节点。
13. 如权利要求11所述的非暂时性的机器可读介质,进一步包括: 识别间接过程调用;以及 将间接过程调用转换为AST中的转换结构。
14. 如权利要求11所述的非暂时性的机器可读介质,其中遍历进一步包括: 将程序的主过程的AST中建立的各过程展开以合并程序中表示每个次级过程的AST。
15. 如权利要求11所述的非暂时性的机器可读介质,进一步包括: 创建全局变量的初始值表格。
16. 如权利要求11所述的非暂时性的机器可读介质,进一步包括当被执行时执行进一 步包括以下步骤的方法的指令: 创建表示初始全局变量值的节点;以及 增加表示初始全局变量值的节点作为用于AST的输入节点。
17. 如权利要求11所述的非暂时性的机器可读介质,进一步包括: 创建全局过程表以引用程序的每个过程和相关AST。
18. 如权利要求11所述的非暂时性的机器可读介质,其中构建抽象系统树包括: 解析程序代码以识别管理选择语句的控制结构;以及 将每个控制结构转换为具有条件函数和选择语句的子图,选择语句被表示为图中后面 合并和循环的分离路径。
19. 如权利要求18所述的非暂时性的机器可读介质,进一步包括: 通过将子图结构的输入和输出接口链接到函数数据流图中的周围节点上而将子图结 构链接到函数数据流图中。
20. 如权利要求11所述的非暂时性的机器可读介质,进一步包括: 将程序的函数数据流图输出到编译器中以指导程序的并行编译。
【专利摘要】一种由编译器执行的改进程序链接过程中的并行处理的程序编译的方法。该方法包括:将程序语句转换为标准格式,构建用于程序中每个过程的抽象系统树(AST),并遍历程序以通过将每个非控制流语句与每个控制结构置入到图中的至少一个节点来构建图。
【IPC分类】G06F9-46, G06F9-38
【公开号】CN104662513
【申请号】CN201380047127
【发明人】洛林·克雷默
【申请人】洛林·克雷默
【公开日】2015年5月27日
【申请日】2013年7月9日
【公告号】EP2872989A1, US20140019949, WO2014011696A1
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1