本发明专利技术提供一种面向可变粒度内存系统的二进制文件重写方法,包括:在二进制文件的中间表示中找到热循环区域;对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;以及,根据修改后的热循环区域生成目标机器代码。本发明专利技术能够自动完成在二进制文件上支持可变粒度内存系统的访存操作;通过自动分析应用程序特征以及可变粒度内存系统的核心特征,选择合适的重写方式,兼顾了二进制文件重写过程的效率和二进制文件的执行性能。
【技术实现步骤摘要】
一种面向可变粒度内存系统的二进制文件重写方法
本专利技术涉及编译器优化
,更具体地,涉及一种面向可变粒度内存系统的二进制文件重写方法。
技术介绍
计算机的内存系统是影响计算机体系结构和软件执行效率的重要因素。传统的内存访问的数据粒度是固定不变的,而且有增大的趋势。但是在真实程序中,实际每次数据访问的粒度是变化的,对于数据访问是无局部性且粒度很小的应用,每次访问采用固定的大数据粒度必然会造成浪费;而一些需要大量连续数据读写的应用,又需要将整个数据访问分割成多个内存事务进行,从而增加了协议上的开销。可见,固定粒度的访存模式无法有效利用访存带宽。随着云计算、大数据应用的兴起,程序对数据的访问带宽和容量要求越来越高,传统内存系统遇到延迟、带宽、效率、容量、功耗的挑战,从而出现了新型的内存系统,可变粒度内存系统是其一。可变粒度内存系统是能够支持不同粒度访存请求的内存系统,其合理地合并访存请求,能够减少访存总开销并提高有效带宽利用率。对于可变粒度内存系统来说,新的结构特征往往涉及访存方式的一些变化。例如,需要显式地增加指令来移入/移出数据、合理合并访存请求,以减少访存次数及开销并提高有效带宽利用率。由于大量的面向传统内存系统的二进制形式的应用程序代码(下文简称二进制文件)不适用于可变粒度内存系统,因此如何将该二进制形式的应用程序代码平滑地移植到可变粒度内存系统上,同时无需应用程序的源码且无需修改编译器源码,是目前需要解决的问题。
技术实现思路
针对上述问题,根据本专利技术的一个实施例,提供一种面向可变粒度内存系统的二进制文件重写方法,包括:步骤1)、在二进制文件的中间表示中找到热循环区域,其中,热循环区域是执行次数超过预定阈值的循环的代码区域;步骤2)、对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;其中,一个访存信息指示一条访存指令且包括访存所访问的地址信息,所述头语句用于实现从可变粒度内存系统读取的功能;步骤3)、根据修改后的热循环区域生成目标机器代码。上述方法中,在步骤2)中,合并访存行为符合可变粒度访存模式的热循环区域内的访存信息包括:合并该区域内的访存信息,使得合并后的访存信息对应的效益大于构成该合并的每个访存信息对应的效益之和并且合并后该区域的访存行为符合可变粒度访存模式;其中,所述效益与资源占用率及性能相关联。上述方法中,所述效益表示如下:其中,FACTORS=3,factori表示effecti的意愿因子,取值在0到1之间,并且βi为参数;effect1=size(data)/time(dataaccess),size(data)表示合并的访存信息的数据总长度,time(dataaccess)表示合并的访存信息对应的可变粒度内存系统的访问次数与一次访问内存的开销之积;effect2=size(data)/size(transfer_data),size(transfer_data)表示合并的访存信息对应的可变粒度内存系统的访问操作的总数据传输量;effect3=size(data)/size(getin_data),size(getin_data)表示合并的访存信息对应的可变粒度内存系统访问操作所存入高速缓存的总数据量。上述方法中,步骤1)之前还包括:选择动态地执行二进制文件重写或者静态地执行二进制文件重写。其中,人为选择二进制文件重写的动态或静态执行方式;或者如果不存在人为选择,则对于运行时间大于预定时间阈值且系统资源满足其资源需求的二进制文件,选择动态地执行二进制文件重写,否则选择静态地执行二进制文件重写。上述方法中,步骤1)还包括:如果静态地执行二进制文件重写,则将所述二进制文件翻译成中间表示;如果动态地执行二进制文件重写,则将已执行的并且未翻译过的二进制文件代码翻译成中间表示。上述方法中,步骤2)包括对于访存行为符合可变粒度访存模式的热循环区域执行以下步骤:步骤21)、提取访存信息,按顺序记录该访存信息;其中,一个访存信息指示一条访存指令且包括访存所访问的地址信息;步骤22)、如果动态地执行二进制文件重写,则采用预定的方式合并该区域内的访存信息;如果静态地执行二进制文件重写,则对该区域内的访存信息根据地址信息进行聚类,在每个类内采用预定的方式合并访存信息;步骤23)、合并后,在该区域之前插入头语句,该头语句用于实现从可变粒度内存系统读取的功能。在步骤22)中,采用预定的方式合并区域内的访存信息包括:从该区域的初始访存信息开始依次尝试合并访存信息,直到遇到一个访存信息m使得合并后该区域的访存行为不符合可变粒度访存模式或者合并后的访存信息对应的效益不大于构成该合并的每个访存信息对应的效益之和,合并初始访存信息到该访存信息m之前的访存信息;将该访存信息m作为初始访存信息重复以上过程,直到处理完该区域的最后一个访存信息。上述方法中,步骤3)还包括:如果静态地执行二进制文件重写,则根据生成的目标机器代码得到新的二进制文件并输出;如果动态地执行二进制文件重写,则将生成的目标机器代码存放到指定的内存区域并且更新相应前驱基本块的相关跳转指令,如果源二进制文件未处理完则返回步骤1)。上述方法中,步骤2)还包括:合并后,在该区域之后插入尾语句,该尾语句用于实现向可变粒度内存系统写回的功能。上述方法中,对于采用用户可编程的片上存储器作为片上高速缓存的可变粒度内存系统,步骤2)还包括:建立内存虚拟地址与对应的片上存储器虚拟地址的映射关系,并且修改相应指令。上述方法中,将具有连续访问大块数据的特征或者固定步长地非连续访问大块数据的特征的热循环区域作为访存行为符合可变粒度访存模式的热循环区域。本专利技术为当前的二进制文件选择适用的重写方式,通过静态或者动态二进制重写过程,对访存指令自动进行可变粒度内存系统适用性的分析,自动增加地址空间映射,进行向可变粒度内存系统的访存代码的转换,从而实现应用程序向可变粒度内存系统的平滑移植。本专利技术不需要应用程序的源码并且不需要修改编译器源码,就能够自动完成在二进制文件上支持可变粒度内存系统的访存操作,适用于很多应用场合;此外,通过合理地合并访存请求,减少了访存总开销,提高了有效带宽利用率,并且兼顾了二进制文件重写过程的效率。附图说明以下参照附图对本专利技术实施例作进一步说明,其中:图1是根据本专利技术一个实施例的面向可变粒度内存系统的二进制文件重写方法的流程图;图2(a)-2(c)是根据本专利技术一个实施例的访存代码转换前后的示意图。具体实施方式为了使本专利技术的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本专利技术进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。根据本专利技术的一个实施例,提供一种面向可变粒度内存系统的二进制文件重写方法。概括而言,该方法包括:在二进制文件的中间表示中找到热循环区域;对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;以及,根据修改后的热循环区域生成目标机器代码。下面结合图1对该面向可变粒度内存系统的二进制文件重写方法的各个步骤进行详细描述。第一步:选择合适的重写方式在本步骤中,对二进制形式的应用程序代码(即二进制文件)本文档来自技高网...
【技术保护点】
一种面向可变粒度内存系统的二进制文件重写方法,包括:步骤1)、在二进制文件的中间表示中找到热循环区域,其中,热循环区域是执行次数超过预定阈值的循环的代码区域;步骤2)、对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;其中,一个访存信息指示一条访存指令且包括访存所访问的地址信息,所述头语句用于实现从可变粒度内存系统读取的功能;步骤3)、根据修改后的热循环区域生成目标机器代码。
【技术特征摘要】
1.一种面向可变粒度内存系统的二进制文件重写方法,包括:步骤1)、在二进制文件的中间表示中找到热循环区域,其中,热循环区域是执行次数超过预定阈值的循环的代码区域;步骤2)、对于访存行为符合可变粒度访存模式的热循环区域,合并该区域内的访存信息,并且在该区域之前插入头语句;其中,一个访存信息指示一条访存指令且包括访存所访问的地址信息,所述头语句用于实现从可变粒度内存系统读取的功能;步骤3)、根据修改后的热循环区域生成目标机器代码。2.根据权利要求1所述的方法,在步骤2)中,合并访存行为符合可变粒度访存模式的热循环区域内的访存信息包括:合并该区域内的访存信息,使得合并后的访存信息对应的效益大于构成该合并的每个访存信息对应的效益之和并且合并后该区域的访存行为符合可变粒度访存模式;其中,所述效益与资源占用率及性能相关联。3.根据权利要求2所述的方法,其中,所述效益表示如下:其中,FACTORS=3,factori表示effecti的意愿因子,取值在0到1之间,并且βi为参数;effect1=size(data)/time(dataaccess),size(data)表示合并的访存信息的数据总长度,time(dataaccess)表示合并的访存信息对应的可变粒度内存系统的访问次数与一次访问内存的开销之积;effect2=size(data)/size(transfer_data),size(transfer_data)表示合并的访存信息对应的可变粒度内存系统的访问操作的总数据传输量;effect3=size(data)/size(getin_data),size(getin_data)表示合并的访存信息对应的可变粒度内存系统访问操作所存入高速缓存的总数据量。4.根据权利要求1所述的方法,其中,步骤1)之前还包括:选择动态地执行二进制文件重写或者静态地执行二进制文件重写。5.根据权利4所述的方法,其中,人为选择二进制文件重写的动态或静态执行方式;或者如果不存在人为选择,则对于运行时间大于预定时间阈值且系统资源满足其资源需求的二进制文件,选择动态地执行二进制文件重写,否则选择静态地执行二...
【专利技术属性】
技术研发人员:吕方,王晨曦,黄磊,冯晓兵,崔慧敏,王蕾,
申请(专利权)人:中国科学院计算技术研究所,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。