一种面向可变粒度内存系统的二进制文件重写方法

文档序号:8361176阅读:288来源:国知局
一种面向可变粒度内存系统的二进制文件重写方法
【技术领域】
[0001] 本发明涉及编译器优化技术领域,更具体地,涉及一种面向可变粒度内存系统的 二进制文件重写方法。
【背景技术】
[0002] 计算机的内存系统是影响计算机体系结构和软件执行效率的重要因素。传统的内 存访问的数据粒度是固定不变的,而且有增大的趋势。但是在真实程序中,实际每次数据访 问的粒度是变化的,对于数据访问是无局部性且粒度很小的应用,每次访问采用固定的大 数据粒度必然会造成浪费;而一些需要大量连续数据读写的应用,又需要将整个数据访问 分割成多个内存事务进行,从而增加了协议上的开销。可见,固定粒度的访存模式无法有效 利用访存带宽。随着云计算、大数据应用的兴起,程序对数据的访问带宽和容量要求越来越 高,传统内存系统遇到延迟、带宽、效率、容量、功耗的挑战,从而出现了新型的内存系统,可 变粒度内存系统是其一。可变粒度内存系统是能够支持不同粒度访存请求的内存系统,其 合理地合并访存请求,能够减少访存总开销并提高有效带宽利用率。
[0003] 对于可变粒度内存系统来说,新的结构特征往往涉及访存方式的一些变化。例如, 需要显式地增加指令来移入/移出数据、合理合并访存请求,以减少访存次数及开销并提 高有效带宽利用率。由于大量的面向传统内存系统的二进制形式的应用程序代码(下文简 称二进制文件)不适用于可变粒度内存系统,因此如何将该二进制形式的应用程序代码平 滑地移植到可变粒度内存系统上,同时无需应用程序的源码且无需修改编译器源码,是目 前需要解决的问题。

【发明内容】

[0004] 针对上述问题,根据本发明的一个实施例,提供一种面向可变粒度内存系统的二 进制文件重写方法,包括:
[0005] 步骤1)、在二进制文件的中间表示中找到热循环区域,其中,热循环区域是执行次 数超过预定阈值的循环的代码区域;
[0006] 步骤2)、对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访 存信息,并且在该区域之前插入头语句;其中,一个访存信息指示一条访存指令且包括访存 所访问的地址信息,所述头语句用于实现从可变粒度内存系统读取的功能;
[0007] 步骤3)、根据修改后的热循环区域生成目标机器代码。
[0008] 上述方法中,在步骤2)中,合并访存行为符合可变粒度访存模式的热循环区域内 的访存信息包括:
[0009] 合并该区域内的访存信息,使得合并后的访存信息对应的效益大于构成该合并的 每个访存信息对应的效益之和并且合并后该区域的访存行为符合可变粒度访存模式;其 中,所述效益与资源占用率及性能相关联。
[0010] 上述方法中,所述效益表示如下:
【主权项】
1. 一种面向可变粒度内存系统的二进制文件重写方法,包括: 步骤1)、在二进制文件的中间表示中找到热循环区域,其中,热循环区域是执行次数超 过预定阈值的循环的代码区域; 步骤2)、对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信 息,并且在该区域之前插入头语句;其中,一个访存信息指示一条访存指令且包括访存所访 问的地址信息,所述头语句用于实现从可变粒度内存系统读取的功能; 步骤3)、根据修改后的热循环区域生成目标机器代码。
2. 根据权利要求1所述的方法,在步骤2)中,合并访存行为符合可变粒度访存模式的 热循环区域内的访存信息包括: 合并该区域内的访存信息,使得合并后的访存信息对应的效益大于构成该合并的每个 访存信息对应的效益之和并且合并后该区域的访存行为符合可变粒度访存模式;其中,所 述效益与资源占用率及性能相关联。
3. 根据权利要求2所述的方法,其中,所述效益表示如下:
其中,FACTORS = 3, factor1表示effect 1的意愿因子,取值在O到1之间,并 且
β 1为参数;effect 1= size (data) /time (data access), size (data)表示合并的访存信息的数据总长度,time (data access)表示合并的访存信息 对应的可变粒度内存系统的访问次数与一次访问内存的开销之积;effect2 = size (data) / size (transfer_data),size (transfer_data)表示合并的访存信息对应的可变粒度内存系 统的访问操作的总数据传输量;effect3= size (data)/size (getin_data),size (getin_ data)表示合并的访存信息对应的可变粒度内存系统访问操作所存入高速缓存的总数据 量。
4. 根据权利要求1所述的方法,其中,步骤1)之前还包括: 选择动态地执行二进制文件重写或者静态地执行二进制文件重写。
5. 根据权利4所述的方法,其中,人为选择二进制文件重写的动态或静态执行方式;或 者如果不存在人为选择,则对于运行时间大于预定时间阈值且系统资源满足其资源需求的 二进制文件,选择动态地执行二进制文件重写,否则选择静态地执行二进制文件重写。
6. 根据权利要求4或5所述的方法,其中,步骤1)还包括: 如果静态地执行二进制文件重写,则将所述二进制文件翻译成中间表示; 如果动态地执行二进制文件重写,则将已执行的并且未翻译过的二进制文件代码翻译 成中间表示。
7. 根据权利要求4或5所述的方法,其中,步骤2)包括对于访存行为符合可变粒度访 存模式的热循环区域执行以下步骤: 步骤21)、提取访存信息,按顺序记录该访存信息;其中,一个访存信息指示一条访存 指令且包括访存所访问的地址信息; 步骤22)、如果动态地执行二进制文件重写,则采用预定的方式合并该区域内的访存信 息;如果静态地执行二进制文件重写,则对该区域内的访存信息根据地址信息进行聚类,在 每个类内采用预定的方式合并访存信息; 步骤23)、合并后,在该区域之前插入头语句,该头语句用于实现从可变粒度内存系统 读取的功能。
8. 根据权利要求7所述的方法,在步骤22)中,采用预定的方式合并区域内的访存信息 包括: 从该区域的初始访存信息开始依次尝试合并访存信息,直到遇到一个访存信息m使得 合并后该区域的访存行为不符合可变粒度访存模式或者合并后的访存信息对应的效益不 大于构成该合并的每个访存信息对应的效益之和,合并初始访存信息到该访存信息m之前 的访存信息;将该访存信息m作为初始访存信息重复以上过程,直到处理完该区域的最后 一个访存信息。
9. 根据权利要求4或5所述的方法,其中,步骤3)还包括: 如果静态地执行二进制文件重写,则根据生成的目标机器代码得到新的二进制文件并 输出; 如果动态地执行二进制文件重写,则将生成的目标机器代码存放到指定的内存区域并 且更新相应前驱基本块的相关跳转指令,如果源二进制文件未处理完则返回步骤1)。
10. 根据权利要求1-5中任何一个所述的方法,其中,步骤2)还包括: 合并后,在该区域之后插入尾语句,该尾语句用于实现向可变粒度内存系统写回的功 能。
11. 根据权利要求1-5中任何一个所述的方法,其中,对于采用用户可编程的片上存储 器作为片上高速缓存的可变粒度内存系统,步骤2)还包括 : 建立内存虚拟地址与对应的片上存储器虚拟地址的映射关系,并且修改相应指令。
12. 根据权利要求1-5中任何一个所述的方法,其中,将具有连续访问大块数据的特征 或者固定步长地非连续访问大块数据的特征的热循环区域作为访存行为符合可变粒度访 存模式的热循环区域。
【专利摘要】本发明提供一种面向可变粒度内存系统的二进制文件重写方法,包括:在二进制文件的中间表示中找到热循环区域;对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;以及,根据修改后的热循环区域生成目标机器代码。本发明能够自动完成在二进制文件上支持可变粒度内存系统的访存操作;通过自动分析应用程序特征以及可变粒度内存系统的核心特征,选择合适的重写方式,兼顾了二进制文件重写过程的效率和二进制文件的执行性能。
【IPC分类】G06F9-30
【公开号】CN104679477
【申请号】CN201510082216
【发明人】吕方, 王晨曦, 黄磊, 冯晓兵, 崔慧敏, 王蕾
【申请人】中国科学院计算技术研究所
【公开日】2015年6月3日
【申请日】2015年2月15日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1