消除内存访问冲突的编译装置及其实现方法

文档序号:6337936阅读:322来源:国知局
专利名称:消除内存访问冲突的编译装置及其实现方法
技术领域
本发明涉及的是一种计算机技术领域的装置及方法,具体是一种消除内存访问冲 突的编译装置及其实现方法。
背景技术
编译器是将高级语言转换成机器可执行语言的程序。编译器在转换过程中,需要 对程序中的变量在内存的存放位置进行分配,以避免内存指令在执行过程中因内存冲突而 引发的流水线停顿,最终提高最终生成的机器可执行程序的执行效率。
在现有的处理器中,特别是DSP处理器,指令集通常会支持内存操作数以及多样 的寻址方式。由于在数据处理及其应用中,内存访问操作是一个关键的环节,因此,如何进 行变量分配以最高效率地利用流水线是具有至关重要的意义的。另一方面,对于多数的DSP 架构,为了尽可能地提高内存带宽,通常支持多数据内存架构(一般是双数据内存架构), 即指令可以在同一个时钟周期并行访问多个不同的数据内存,但是不能在同一个时钟周期 多次访问一个数据内存。
解决这种内存冲突的方法有两大类,一类是程序员手动安排变量的存储位置,特 别在嵌入式应用中,手动分配变量是一种非常有效的内存分配方法,它使得程序在数据结 构算法层面上消除了内存冲突,但是当程序结构变得复杂时,人为分配变量的方法经常会 陷入局部最优化的怪圈;另一类是通过编译器进行优化,这种方法可以从全局角度进行变 量存储空间分配,但是现阶段编译器对于多数据存储器架构的变量分配策略仍然不完善。
经对现有技术的文献调查发现,G. Grewal等在2006年IEEE Congress on Evolutionary Computation上采用遗传算法并针对M56K这一类双数据内存的DSP结构提 出了一种内存分配策略。但是这种分配策略对于多于双通道的内存结构无能为力,且当内 存访问出现源操作数与目的操作数相同的情况,将不可避免地发生内存冲突;同时,这种分 配算法仅针对内存变量为单一变量的情况有效,当变量为数组等连续结构时,这种分配算 法将失效。发明内容
本发明针对现有技术存在的上述不足,提供一种消除内存访问冲突的编译装置及 其实现方法,使得因内存冲突而产生的额外开销大大减小。
本发明是通过以下技术方案实现的
本发明涉及一种消除内存访问冲突的编译装置,包括前端语言分析单元、内存变 量分析单元、内存冲突消除单元和转换输出单元,其中前端语言分析单元与内存变量分析 单元和内存冲突消除单元相连接并传输由源程序转换的中间语言序列、内存模型与内存操 作信息和源文件函数依赖树,内存变量分析单元与内存冲突消除单元相连接并传输变量内 存分配和内存块操作信息,内存冲突消除单元与转换输出单元相连接并传输经过内存分配 优化的中间语言信息,转换输出单元输出最终的可执行代码。
所述的前端语言分析单元包括内存配置组件、语言分析组件和文件函数关系组 件,其中内存配置组件与内存变量分析单元相连接并通过内存操作信息表和内存模型描 述表传递内存操作信息和内存模型,语言分析组件将源程序转换为中间语言序列并分别传 递给内存变量分析单元和内存冲突消除单元,文件函数关系组件分析源程序中各文件的函 数依赖关系并以源文件函数依赖树的形式传递给内存冲突消除单元。
所述的内存操作信息表包括数学运算指令功能、操作数个数、操作数类型、寻址 模式、数据宽度以及执行开销;
所述的内存模型描述表包括内存的总大小、内存分区的个数、各个内存分区的起 始地址和大小。
所述的内存变量分析单元读取并分析记录中间程序包含的所有的内存变量及其 操作,该内存变量分析单元包括内存变量分配器和变量分析组件,其中内存变量分配器 分析由前端语言分析单元生成的中间语言序列中的内存变量信息并采用动态分配或静态 分配以变量内存分配表的形式传递给变量分析组件,内存变量分析单元通过变量内存分配 表来分析每一个程序基本块中的内存操作信息并记录到内存块操作表中。
所述的动态分配是指内存变量分配器通过唯一确定且记录到变量内存分配表中 的分配标识以跟踪记录内存变量的名称以及生存周期信息;
所述的静态分配是指内存变量分配器标识该变量生存周期为全局并记录到变量 内存分配表中;
所述的变量内存分配表包括变量标识、变量名、变量尺寸、变量生存周期、变量分 割以及内存分配,其中变量标识是区别不同变量的唯一标识;变量尺寸记录变量的大小 信息;变量生存周期记录变量的生存周期,包括变量的分配时刻以及变量的释放时刻,在初 始阶段对于全局变量来说,分配时刻即程序开始,释放时刻是程序终止;变量分割记录变量 经过变量分割变换模块后的新信息,包括分割数量,每个分割的变量重命名,以及各分割的 内存分配;
所述的内存块操作表中的每一个表项标识基本块中内存操作的相关信息;相关信 息包含源内存操作数的个数,每个源内存操作数的大小、变量类型和操作数更新方式,目 标内存操作数的个数,每个目标内存操作数的大小、类型和操作数更新方式,内存操作的类 型。
所述的内存冲突消除单元包括变量分割组件、全局内存分配组件和寻址模式选 择组件,其中变量分割组件接收由前端语言单元传递的中间语言序列,通过分析中间程序 中存在的内存冲突,对符合分割模型的变量进行分割和重命名操作,同时更新变量内存分 配表和内存块操作表信息并分别输出至全局内存分配组件和寻址模式选择组件;全局内存 分配组件读取更新后的内存分配表并根据其中的内存变量的大小,生存周期采用优化算法 对所有的内存变量进行分配并输出至寻址模式选择组件;寻址模式选择组件根据内存块操 作表的信息,以基本块为单位为数组形式的变量分配寻址模式。中间程序依次通过上述三 个组件的转换后,内存冲突消除单元输出经过内存分配优化的中间程序和一个变量链接文 件。
所述的变量链接文件包括每个内存分区的标识、内存分区的起始地址、分配到该 内存的变量信息;为了减小内存的碎片,分配到各内存分区的变量按照变量大小从大到小的顺序依次进行分配;变量信息包括变量名,变量的对齐模式、变量的大小。
所述的转换输出单元,输入为变量链接表和中间程序,通过转换最终输出机器可 执行的程序代码。
本发明涉及上述装置的实现方法,包括以下步骤
第一步用户编译源程序,对需要进行内存分配调度的变量结构通过内存变量分 配器进行分配,使得编译器能够显式识别所有需要内存分配调度的变量;
第二步用户使用本发明的一种简洁、易行且直观的内存操作和内存模型描述方 法对处理器支持的内存操作、寻址模式以及内存的模型进行描述;用户只需要按照规范填 入规范化的表格就可完成对内存操作以及内存模型的描述;
第三步将用户对内存操作以及内存模型的描述信息提取出来,并分别组织成具 有良好接口、同时有利于编译器解析的内存操作信息结构和特定内存的内存模型;
第四步用户输入需要编译的源程序和源程序的文件依赖关系;根据用户编译的 文件依赖关系构造一棵源文件函数依赖树;
第五步源程序通过前端语言单元编译转换成编译器通用的一种中间程序,在这 一步中,可以实施多种编译优化策略,包括对内存操作的调度,以消除内存操作之间存在的 因数据相关而产生的冲突;
第六步将由内存变量分配器分配的内存变量存放在变量内存分配表中;
第七步结合第三步生成的内存操作信息结构,以及第六步生成的变量内存分配 表,分析中间程序中对应内存变量的操作行为,并以基本块的形式构建内存块操作表;
第八步根据第七步生成的内存操作表中各个内存变量的操作类型,通过变量分 割模块检测各个内存块操作表项是否匹配分割模型,对于符合模型的内存变量进行变量分 割和重命名;
第九步根据第四步生成的源文件函数依赖树,找到发生分割重命名的基本块与 变量,并找到依赖关系中该基本块的所有后续基本块中对此分割重命名变量的所有引用, 对它们也依次进行更新;
第十步重复第八步和第九步,直到完成所有满足模型的变量分割与重命名,同时 更新变量内存分配表;
第十一步根据变量内存分配表、内存块操作表通过全局优化模块进行内存变量 全局优化分配;一种全局优化的方法是采用遗传算法计算出内存分配的优化解;根据算法 所找到的最优解更新变量内存分配表和内存块操作表;
第十二步根据内存块操作表的信息中各个内存块操作的源和目的操作数的更新 方式,结合第三步中的内存操作结构信息中描述的寻址模式,由寻址模式分配组件选择合 适的寻址模式;
第十三步根据最终的变量内存分配表生成变量链接文件;
第十四步根据变量链接文件将中间程序生成最终生成机器可执行程序。
与现有技术相比,本发明具有以下有益的效果
本发明提供了通用的结构化内存指令描述和内存结构模型配置方法,仅需根据用 户输入的配置信息便能完成基于用户内存模型的内存变量分配优化。
1)相对于以往仅仅局限于双数据内存模型的内存分配策略,本发明所提供的分配6算法不受该条件限制,可以支持多数据内存模型,因此可以针对用户自定义的内存模型进 行优化分配。
2)本发明提出的编译装置不仅仅局限于现有技术对内存操作的源操作数冲突分 析,而可以同时对内存操作的源操作数之间、源和目的操作数之间进行冲突分析,因此功能更加完善。


图1是本发明系统示意图。
图2是本发明方法流程图。
图3是用于描述内存操作的规范化的表格的结构示意图。
图4是用于描述内存模型的规范化的表格的结构示意图。
图5是变量内存分配表示意图。
图6是内存块操作表示意图。
图7是变量链接文件示意图。
图8是第三类分割模型的典型示例的分割示意图。
图9是第三类分割模型一般形式的分割示意图。
图10是第四类分割模型的典型示例的分割示意图。
图11是采用遗传算法的内存全局优化流程图。
图12是实施例内存分配解修复示意图。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行 实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施 例。
如图1所示,本实施例包括前端语言分析单元、内存变量分析单元、内存冲突消 除单元和转换输出单元,其中前端语言分析单元与内存变量分析单元和内存冲突消除单 元相连接并传输由源程序转换的中间语言序列、内存模型与内存操作信息和源文件函数依 赖树,内存变量分析单元与内存冲突消除单元相连接并传输变量内存分配和内存块操作信 息,内存冲突消除单元与转换输出单元相连接并传输经过内存分配优化的中间语言信息, 转换输出单元输出最终的可执行代码。
所述的前端语言分析单元包括内存配置组件、语言分析组件和文件函数关系组 件,其中内存配置组件与内存变量分析单元相连接并通过内存操作信息表和内存模型描 述表传递内存操作信息和内存模型,语言分析组件将源程序转换为中间语言序列并分别传 递给内存变量分析单元和内存冲突消除单元,文件函数关系组件分析源程序中各文件的函 数依赖关系并以源文件函数依赖树的形式传递给内存冲突消除单元。
所述的内存操作信息表包括数学运算指令功能、操作数个数、操作数类型、寻址 模式、数据宽度以及执行开销。
所述的内存模型描述表包括内存的总大小、内存分区的个数、各个内存分区的起 始地址和大小。
所述的内存变量分析单元读取并分析记录中间程序包含的所有的内存变量及其操作,该内存变量分析单元包括内存变量分配器和变量分析组件,其中内存变量分配器 分析由前端语言分析单元生成的中间语言序列中的内存变量信息并采用动态分配或静态 分配以变量内存分配表的形式传递给变量分析组件,内存变量分析单元通过变量内存分配 表来分析每一个程序基本块中的内存操作信息并记录到内存块操作表中。所述的动态分配是指内存变量分配器通过唯一确定且记录到变量内存分配表中 的分配标识以跟踪记录内存变量的名称以及生存周期信息。所述的静态分配是指内存变量分配器标识该变量生存周期为全局并记录到变量 内存分配表中。所述的变量内存分配表包括变量标识、变量名、变量尺寸、变量生存周期、变量分 割以及内存分配,其中变量标识是区别不同变量的唯一标识;变量尺寸记录变量的大小 信息;变量生存周期记录变量的生存周期,包括变量的分配时刻以及变量的释放时刻,在初 始阶段对于全局变量来说,分配时刻即程序开始,释放时刻是程序终止;变量分割记录变量 经过变量分割变换模块后的新信息,包括分割数量,每个分割的变量重命名,以及各分割的 内存分配。所述的内存块操作表中的每一个表项标识基本块中内存操作的相关信息;相关信 息包含源内存操作数的个数,每个源内存操作数的大小、变量类型和操作数更新方式,目 标内存操作数的个数,每个目标内存操作数的大小、类型和操作数更新方式,内存操作的类 型。所述的内存冲突消除单元包括变量分割组件、全局内存分配组件和寻址模式选 择组件,其中变量分割组件接收由前端语言单元传递的中间语言序列,通过分析中间程序 中存在的内存冲突,对符合分割模型的变量进行分割和重命名操作,同时更新变量内存分 配表和内存块操作表信息并分别输出至全局内存分配组件和寻址模式选择组件;全局内存 分配组件读取更新后的内存分配表并根据其中的内存变量的大小,生存周期采用优化算法 对所有的内存变量进行分配并输出至寻址模式选择组件;寻址模式选择组件根据内存块操 作表的信息,以基本块为单位为数组形式的变量分配寻址模式。中间程序依次通过上述三 个组件的转换后,内存冲突消除单元输出经过内存分配优化的中间程序和一个变量链接文 件。所述的变量分割组件首先查找中间程序是否存在因源操作数和目标操作数相同 (或者重叠)而存在的普通内存分配无法解决的内存冲突操作,分析这些内存操作,并根据 分割模型将这些变量进行特定分割以及重命名;分割完成后,根据源文件函数依赖树更新 变量,同时更新内存块操作表和变量内存分配表。所述的分割模型包括第一种模型源操作数是2个以上的内存操作数,分割该类 型的内存操作模型首先引入一个临时中间变量,原内存操作会分裂成两个2操作数的内存 操作,第一个操作的目的操作数是临时中间变量,第二个操作的一源操作数为此临时变量; 第二种模型的两源操作数是同一个变量,且内存操作是加法、减法或除法,分割该类型的内 存操作模型即将移位操作代替加法操、用0代替减法操作、当内存值不为0用1代替除法结 果;第三种模型的两源操作数是一个数组的不同元素,分割该类型的内存操作模型即以这 两个元素的间隔为单位分割数组单元,并将相间隔的数组分割子块拼接在一起,最终分割成两个数组子块;第四种模型内存操作的一源操作数和目的操作数相同或则是一个数组的 不同元素,分割该类型的内存操作模型即将目的操作数进行重命名。所述的全局内存分配组件,读取变量内存分配表的信息,根据变量分配代价通过 全局优化算法计算出变量分配代价最小的值所对应的变量分配策略,根据分配策略生成变 量链接文件。所述的变量分配代价是指由变量的大小、内存操作的频繁程度和内存操作的执 行代价三部分决定的,且变量分配代价与这三个部分成正比。所述的变量链接文件包括每个内存分区的标识、内存分区的起始地址、分配到该 内存的变量信息;为了减小内存的碎片,分配到各内存分区的变量按照变量大小从大到小 的顺序依次进行分配;变量信息包括变量名,变量的对齐模式、变量的大小。所述的寻址模式选择组件,首先标记内存块操作表中的各个内存块中源操作数和 目的操作数的更新方式,根据用户输入的内存指令及寻址模式描述,分配给各个内存块合 适的寻址模式。所述的寻址模式支持正常自增减寻址模式、对称寻址模式、比特反转寻址模式和 循环寻址模式。所述的转换输出单元,输入为变量链接表和中间程序,通过转换最终输出机器可 执行的程序代码。如图2所示,上述编译装置具体通过以下方式实现编译第一步用户编译源程序,对需要进行内存分配调度的变量结构通过内存变量分 配器进行分配,使得编译器能够显式识别所有需要内存分配调度的变量;第二步用户使用本实施例的一种简洁、易行且直观的内存操作和内存模型描述 方法对处理器支持的内存操作、寻址模式以及内存的模型进行描述;用户只需要按照规范 填入规范化的表格就可完成对内存操作以及内存模型的描述;第三步将用户对内存操作以及内存模型的描述信息提取出来,并分别组织成具 有良好接口、同时有利于编译器解析的内存操作信息结构和特定内存的内存模型;第四步用户输入需要编译的源程序和源程序的文件依赖关系;根据用户编译的 文件依赖关系构造一棵源文件函数依赖树;第五步源程序通过前端语言单元编译转换成编译器通用的一种中间程序,在这 一步中,可以实施多种编译优化策略,包括对内存操作的调度,以消除内存操作之间存在的 因数据相关而产生的冲突;第六步将由内存变量分配器分配的内存变量存放在变量内存分配表中;第七步结合第三步生成的内存操作信息结构,以及第六步生成的变量内存分配 表,分析中间程序中对应内存变量的操作行为,并以基本块的形式构建内存块操作表;第八步根据第七步生成的内存操作表中各个内存变量的操作类型,通过变量分 割模块检测各个内存块操作表项是否匹配分割模型,对于符合模型的内存变量进行变量分 割和重命名; 第九步根据第四步生成的源文件函数依赖树,找到发生分割重命名的基本块与 变量,并找到依赖关系中该基本块的所有后续基本块中对此分割重命名变量的所有引用, 对它们也依次进行更新;
第十步重复第八步和第九步,直到完成所有满足模型的变量分割与重命名,同时 更新变量内存分配表;第十一步根据变量内存分配表、内存块操作表通过全局优化模块进行内存变量 全局优化分配;一种全局优化的方法是采用遗传算法计算出内存分配的优化解;根据算法 所找到的最优解更新变量内存分配表和内存块操作表;第十二步根据内存块操作表的信息中各个内存块操作的源和目的操作数的更新 方式,结合第三步中的内存操作结构信息中描述的寻址模式,由寻址模式分配组件选择合 适的寻址模式;第十三步根据最终的变量内存分配表生成变量链接文件;第十四步根据变量链接文件将中间程序生成最终生成机器可执行程序。如图1所示为本实施例的方法流程图,即用户描述步骤,用户通过本实施例提供 的内存操作和内存模型描述表进行内存操作和内存模型的描述;前端语言转换步骤,将源 程序转换成统一的编译器中间语言;内存变量分析步骤,对中间程序进行分析,记录所有内 存变量的信息,以及各个内存块的操作信息;内存冲突消除步骤,搜索中间程序中的内存操 作,根据分割模型分别进行变量分割与重命名、全局内存分配优化并生成各个内存变量的 链接信息以及分析内存块操作中源操作数和目标操作数的更新方式选择合适的寻址方式; 转换输出步骤,根据链接信息将中间程序转换成机器可执行的代码。如图3 图14所示,本实例中,用户对内存操作和内存模型配置的描述采用填空 和填写表格的方式,其中内存操作描述表与内存模型描述表的示意图分别如图3和图4所 示,本实例中用户对配置的描述如下所示用户的处理器支持32位的乘法指令,该指令有3个操作数,且都为内存操作数,支持普通自加减寻址。内存操作描述表如下
权利要求
1.一种消除内存访问冲突的编译装置,其特征在于,包括前端语言分析单元、内存变 量分析单元、内存冲突消除单元和转换输出单元,其中前端语言分析单元与内存变量分析 单元和内存冲突消除单元相连接并传输由源程序转换的中间语言序列、内存模型与内存操 作信息和源文件函数依赖树,内存变量分析单元与内存冲突消除单元相连接并传输变量内 存分配和内存块操作信息,内存冲突消除单元与转换输出单元相连接并传输经过内存分配 优化的中间语言信息,转换输出单元输出最终的可执行代码。
2.根据权利要求1所述的消除内存访问冲突的编译装置,其特征是,所述的前端语言 分析单元包括内存配置组件、语言分析组件和文件函数关系组件,其中内存配置组件与 内存变量分析单元相连接并通过内存操作信息表和内存模型描述表传递内存操作信息和 内存模型,语言分析组件将源程序转换为中间语言序列并分别传递给内存变量分析单元和 内存冲突消除单元,文件函数关系组件分析源程序中各文件的函数依赖关系并以源文件函 数依赖树的形式传递给内存冲突消除单元;所述的内存操作信息表包括数学运算指令功 能、操作数个数、操作数类型、寻址模式、数据宽度以及执行开销;所述的内存模型描述表包 括内存的总大小、内存分区的个数、各个内存分区的起始地址和大小。
3.根据权利要求1所述的消除内存访问冲突的编译装置,其特征是,所述的内存变量 分析单元读取并分析记录中间程序包含的所有的内存变量及其操作,该内存变量分析单元 包括内存变量分配器和变量分析组件,其中内存变量分配器分析由前端语言分析单元 生成的中间语言序列中的内存变量信息并采用动态分配或静态分配以变量内存分配表的 形式传递给变量分析组件,内存变量分析单元通过变量内存分配表来分析每一个程序基本 块中的内存操作信息并记录到内存块操作表中,其中动态分配是指内存变量分配器通 过唯一确定且记录到变量内存分配表中的分配标识以跟踪记录内存变量的名称以及生存 周期信息;静态分配是指内存变量分配器标识该变量生存周期为全局并记录到变量内存 分配表中;所述的变量内存分配表包括变量标识、变量名、变量尺寸、变量生存周期、变量 分割以及内存分配,其中变量标识是区别不同变量的唯一标识;变量尺寸记录变量的大 小信息;变量生存周期记录变量的生存周期,包括变量的分配时刻以及变量的释放时刻,在 初始阶段对于全局变量来说,分配时刻即程序开始,释放时刻是程序终止;变量分割记录变 量经过变量分割变换模块后的新信息,包括分割数量,每个分割的变量重命名,以及各分割 的内存分配;所述的内存块操作表中的每一个表项标识基本块中内存操作的相关信息;相 关信息包含源内存操作数的个数,每个源内存操作数的大小、变量类型和操作数更新方 式,目标内存操作数的个数,每个目标内存操作数的大小、类型和操作数更新方式,内存操 作的类型。
4.根据权利要求1所述的消除内存访问冲突的编译装置,其特征是,所述的内存冲突 消除单元包括变量分割组件、全局内存分配组件和寻址模式选择组件,其中变量分割组 件接收由前端语言单元传递的中间语言序列,通过分析中间程序中存在的内存冲突,对符 合分割模型的变量进行分割和重命名操作,同时更新变量内存分配表和内存块操作表信息 并分别输出至全局内存分配组件和寻址模式选择组件;全局内存分配组件读取更新后的 内存分配表并根据其中的内存变量的大小,生存周期采用优化算法对所有的内存变量进行 分配并输出至寻址模式选择组件;寻址模式选择组件根据内存块操作表的信息,以基本块 为单位为数组形式的变量分配寻址模式,中间程序依次通过上述三个组件的转换后,内存冲突消除单元输出经过内存分配优化的中间程序和一个变量链接文件,该变量链接文件包 括每个内存分区的标识、内存分区的起始地址、分配到该内存的变量信息;为了减小内存 的碎片,分配到各内存分区的变量按照变量大小从大到小的顺序依次进行分配;变量信息 包括变量名,变量的对齐模式、变量的大小。
5.根据权利要求1所述的消除内存访问冲突的编译装置,其特征是,所述的转换输出 单元,输入为变量链接表和中间程序,通过转换最终输出机器可执行的程序代码。
6.一种根据上述任一权利要求所述装置的实现方法,其特征在于,包括以下步骤 第一步用户编译源程序,对需要进行内存分配调度的变量结构通过内存变量分配器进行分配,使得编译器能够显式识别所有需要内存分配调度的变量;第二步用户使用本发明的一种简洁、易行且直观的内存操作和内存模型描述方法对 处理器支持的内存操作、寻址模式以及内存的模型进行描述;用户只需要按照规范填入规 范化的表格就可完成对内存操作以及内存模型的描述;第三步将用户对内存操作以及内存模型的描述信息提取出来,并分别组织成具有良 好接口、同时有利于编译器解析的内存操作信息结构和特定内存的内存模型;第四步用户输入需要编译的源程序和源程序的文件依赖关系;根据用户编译的文件 依赖关系构造一棵源文件函数依赖树;第五步源程序通过前端语言单元编译转换成编译器通用的一种中间程序,在这一步 中,可以实施多种编译优化策略,包括对内存操作的调度,以消除内存操作之间存在的因数 据相关而产生的冲突;第六步将由内存变量分配器分配的内存变量存放在变量内存分配表中; 第七步结合第三步生成的内存操作信息结构,以及第六步生成的变量内存分配表,分 析中间程序中对应内存变量的操作行为,并以基本块的形式构建内存块操作表;第八步根据第七步生成的内存操作表中各个内存变量的操作类型,通过变量分割模 块检测各个内存块操作表项是否匹配分割模型,对于符合模型的内存变量进行变量分割和 重命名;第九步根据第四步生成的源文件函数依赖树,找到发生分割重命名的基本块与变量, 并找到依赖关系中该基本块的所有后续基本块中对此分割重命名变量的所有引用,对它们 也依次进行更新;第十步重复第八步和第九步,直到完成所有满足模型的变量分割与重命名,同时更新 变量内存分配表;第十一步根据变量内存分配表、内存块操作表通过全局优化模块进行内存变量全局 优化分配;一种全局优化的方法是采用遗传算法计算出内存分配的优化解;根据算法所找 到的最优解更新变量内存分配表和内存块操作表;第十二步根据内存块操作表的信息中各个内存块操作的源和目的操作数的更新方 式,结合第三步中的内存操作结构信息中描述的寻址模式,由寻址模式分配组件选择合适 的寻址模式;第十三步根据最终的变量内存分配表生成变量链接文件;第十四步根据变量链接文件将中间程序生成最终生成机器可执行程序。
全文摘要
一种计算机技术领域的消除内存访问冲突的编译装置及其实现方法,该装置包括前端语言分析单元、内存变量分析单元、内存冲突消除单元和转换输出单元,前端语言分析单元与内存变量分析单元和内存冲突消除单元相连接并传输由源程序转换的中间语言序列、内存模型与内存操作信息和源文件函数依赖树,内存变量分析单元与内存冲突消除单元相连接并传输变量内存分配和内存块操作信息,内存冲突消除单元与转换输出单元相连接并传输经过内存分配优化的中间语言信息,转换输出单元输出最终的可执行代码。本发明使得因内存冲突而产生的额外开销大大减小。
文档编号G06F9/50GK102043659SQ20101057731
公开日2011年5月4日 申请日期2010年12月8日 优先权日2010年12月8日
发明者刘佩林, 孔吉, 肖贺 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1