[发明专利]消除内存访问冲突的编译装置及其实现方法有效
申请号: | 201110073683.X | 申请日: | 2011-03-25 |
公开(公告)号: | CN102193811A | 公开(公告)日: | 2011-09-21 |
发明(设计)人: | 肖贺;孔吉;刘佩林 | 申请(专利权)人: | 上海交通大学;富士通株式会社 |
主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F12/02 |
代理公司: | 上海交达专利事务所 31201 | 代理人: | 王锡麟;王桂忠 |
地址: | 200240 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 消除 内存 访问 冲突 编译 装置 及其 实现 方法 | ||
技术领域
本发明涉及的是一种计算机技术领域的装置及方法,具体是一种消除内存访问冲突的编译装置及其实现方法。
背景技术
编译器是将高级语言转换成机器可执行语言的程序。编译器在转换过程中,需要对程序中的变量在内存的存放位置进行分配,以避免内存指令在执行过程中因内存冲突而引发的流水线停顿,最终提高最终生成的机器可执行程序的执行效率。
在现有的处理器中,特别是DSP处理器,指令集通常会支持内存操作数以及多样的寻址方式。由于在数据处理及其应用中,内存访问操作是一个关键的环节,因此,如何进行变量分配以最高效率地利用流水线是具有至关重要的意义的。另一方面,对于多数的DSP架构,为了尽可能地提高内存带宽,通常支持多数据内存架构(一般是双数据内存架构),即指令可以在同一个时钟周期并行访问多个不同的数据内存,但是不能在同一个时钟周期多次访问一个数据内存。
解决这种内存冲突的方法有两大类,一类是程序员手动安排变量的存储位置,特别在嵌入式应用中,手动分配变量是一种非常有效的内存分配方法,它使得程序在数据结构算法层面上消除了内存冲突,但是当程序结构变得复杂时,人为分配变量的方法经常会陷入局部最优化的怪圈;另一类是通过编译器进行优化,这种方法可以从全局角度进行变量存储空间分配,但是现阶段编译器对于多数据存储器架构的变量分配策略仍然不完善。
经对现有技术的文献调查发现,G.Grewal等在2006年IEEE Congress on Evolutionary Computation上采用遗传算法并针对M56K这一类双数据内存的DSP结构提出了一种内存分配策略。但是这种分配策略对于多于双通道的内存结构无能为力,且当内存访问出现源操作数与目的操作数相同的情况,将不可避免地发生内存冲突;同时,这种分配算法仅针对内存变量为单一变量的情况有效,当变量为数组等连续结构时,这种分配算法将失效。
发明内容
本发明针对现有技术存在的上述不足,提供一种消除内存访问冲突的编译装置及其实现方法,使得因内存冲突而产生的额外开销大大减小。
本发明是通过以下技术方案实现的:
本发明涉及一种消除内存访问冲突的编译装置,包括:前端语言分析单元、内存变量分析单元、内存冲突消除单元和转换输出单元,其中:前端语言分析单元与内存变量分析单元和内存冲突消除单元相连接并传输由源程序转换的中间语言序列、内存模型与内存操作信息和源文件函数依赖树,内存变量分析单元与内存冲突消除单元相连接并传输变量内存分配和内存块操作信息,内存冲突消除单元与转换输出单元相连接并传输经过内存分配优化的中间语言信息,转换输出单元输出最终的可执行代码。
所述的前端语言分析单元包括:内存配置组件、语言分析组件和文件函数关系组件,其中:内存配置组件与内存变量分析单元相连接并通过内存操作信息表和内存模型描述表传递内存操作信息和内存模型,语言分析组件将源程序转换为中间语言序列并分别传递给内存变量分析单元和内存冲突消除单元,文件函数关系组件分析源程序中各文件的函数依赖关系并以源文件函数依赖树的形式传递给内存冲突消除单元。
所述的内存操作信息表包括:数学运算指令功能、操作数个数、操作数类型、寻址模式、数据宽度以及执行开销;
所述的内存模型描述表包括内存的总大小、内存分区的个数、各个内存分区的起始地址和大小。
所述的内存变量分析单元读取并分析记录中间程序包含的所有的内存变量及其操作,该内存变量分析单元包括:内存变量分配器和变量分析组件,其中:内存变量分配器分析由前端语言分析单元生成的中间语言序列中的内存变量信息并采用动态分配或静态分配以变量内存分配表的形式传递给变量分析组件,内存变量分析单元通过变量内存分配表来分析每一个程序基本块中的内存操作信息并记录到内存块操作表中。
所述的动态分配是指:内存变量分配器通过唯一确定且记录到变量内存分配表中的分配标识以跟踪记录内存变量的名称以及生存周期信息;
所述的静态分配是指:内存变量分配器标识该变量生存周期为全局并记录到变量内存分配表中;
所述的变量内存分配表包括:变量标识、变量名、变量尺寸、变量生存周期、变量分割以及内存分配,其中:变量标识是区别不同变量的唯一标识;变量尺寸记录变量的大小信息;变量生存周期记录变量的生存周期,包括变量的分配时刻以及变量的释放时刻,在初始阶段对于全局变量来说,分配时刻即程序开始,释放时刻是程序终止;变量分割记录变量经过变量分割变换模块后的新信息,包括分割数量,每个分割的变量重命名,以及各分割的内存分配;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学;富士通株式会社,未经上海交通大学;富士通株式会社许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110073683.X/2.html,转载请声明来源钻瓜专利网。