一种使用空闲寄存器类作为快速溢出空间的优化方法技术

技术编号:2827949 阅读:242 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种使用空闲寄存器类作为快速溢出空间的优化方法。该方法包括下列步骤:计算活跃区间的溢出代价并采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估;在原有寄存器分配中,为每个应用程序确定合适的访存延迟值;使用静态分析的结果以及新的访存延迟建立代价模型,计算使用空闲寄存器作为快速溢出空间可能带来的收益和代价,并根据计算结果选择是否使用一种使用空闲寄存器类作为快速溢出空间的优化方法。其能够有效缓解溢出带来的负面效应,并且弥补了软件溢出优化方法中访存压力无法有效改善的不足。

【技术实现步骤摘要】

本专利技术涉及编译器的研发和优化技术,特别是涉及。
技术介绍
在现代处理器技术中,可用寄存器的数量是非常有限的,由寄存器短缺所导致的溢出问题一直都是影响性能的瓶颈之一。因此,编译器技术中很多寄存器分配相关优化技术都将溢出代码作为衡量算法好坏的标准之一。Chaitin是第一个将染色法应用在寄存器分配方面的人,他的算法将所有度数高于可用寄存器的活跃区间进行溢出。在溢出一个活跃区间时,算法会将整个区间全部溢出,这种做法会产生大量的溢出代码。因此,即使在他的算法中加入了一些优化指导策略,溢出代码多仍然是Chaitin分配算法的缺点之一。Chow专利技术了基于优先级的寄存器分配算法,他在分配之前对所有待分配的候选进行溢出代价计算,并按此进行排序,使得溢出代码尽可能的对性能影响小。所有上述优化都是选择软件算法作为解决方案。 另外,由于寄存器数量短缺,一部分变量需要进行溢出操作。它们在寄存器和内存之间进行转换,以便其他变量可以占用这些寄存器做操作。这些内存到寄存器之间的通讯操作往往会引起下列几个问题 1.新增加的通讯操作,即访存操作,会增加应用程序的执行时间。当访存操作遇到cache缺失时,会严重影响程序的性能。 2.当新增加的访存操作发生cache缺失时,引用这些数据的任务队列,如定点操作队列和乱序队列,都会发生新的堵塞。
技术实现思路
本专利技术的目的在于提供,其能够有效缓解溢出带来的负面效应,并且弥补了软件溢出优化方法中访存压力无法改善的不足。 为实现本专利技术的目的而提供的,包括下列步骤 A.计算活跃区间的溢出代价并采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估; B.在原有寄存器分配中,为每个应用程序确定合适的访存延迟值; C.使用静态分析的结果以及新的访存延迟建立代价模型,计算使用空闲寄存器类作为快速溢出空间可能带来的收益和代价,并根据计算结果选择是否使用所述使用空闲寄存器类作为快速溢出空间的优化方法。 所述步骤A还进一步包括步骤 A1.计算活跃区间的溢出代价; A2.采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估。 所述活跃区间,是指在程序中,每个变量拥有的自己的活跃范围。由活跃单元组成,活跃单元与候选变量活跃的基本块一一对应。 所述基本块,是由一定数量的指令组成。 所述计算活跃区间的溢出代价,包括下列步骤 A11.计算每个活跃单元的溢出代价 costi=(ld_cycle×ld_numexp_use+st_cycle×st_numlive_out)×freq A12.计算每个活跃区间的溢出代价 其中n是活跃单元的数量。 所述步骤A2还进一步包括步骤 A21.采用gcc提供的插桩工具统计出每个应用程序的热函数; A22.分析步骤A21统计出的热函数,计算热函数中的溢出代码代价,并将其作为整个应用程序的溢出代价进行分析。 所述热函数的溢出代价,是由热函数中所有基本块的溢出代价组成。基本块的溢出代价,是由所述活跃区间溢出时在此活跃区间的活跃单元需要插入的保存和恢复访存指令组成。 指根据溢出插入的访存与程序中所有访存操作的比值,判断溢出对程序造成的影响, 其中,mi是基本块在第i个程序单元的数量,n是程序单元的数量。 比值越大,说明溢出所占访存比重较高,所述使用空闲寄存器类作为快速溢出空间的优化方法越有可能发挥较好效果。 所述步骤B还进一步包括 B1.采用一级缓存命中时间来设置保存的延迟时间; B2.采用ld_cycle_cache来设置恢复的延迟时间,其中 ld_cycle_cache=ld_hit_cycle+ld_miss_cycle*Dcache_miss_rate ld_hit_cycle和ld_miss_cycle分别表示一级cache读命中以及不命中的延迟; B3.比较ld_cycle_cache和未采用所述使用空闲寄存器类作为快速溢出空间的优化方法时的保存操作延迟,选择较小的作为新的保存操作延迟ld_cycle_irem 其中ld_cycle,是未采用所述使用空闲寄存器类作为快速溢出空间的优化方法时的保存操作延迟。 所述步骤C还进一步包括步骤 C1.计算使用空闲寄存器类作为快速溢出空间的优化方法的代价; C2.计算使用空闲寄存器类作为快速溢出空间的优化方法的收益; C3.为溢出候选选择溢出空间。 所述步骤C1还进一步包括步骤 C11.当选择一个callee寄存器时,代价源于在该寄存器的入口和出口需要增加的保存和恢复指令; 其中n是入口的数量, 其中n是出口的数量。 使用callee寄存器的代价 cost_idle_callee=entry_costs+exit_costs。 C12.当选择一个caller寄存器时,代价还源于使用的过程中需要在其跨越的所有调用点前后增加的保存和恢复指令; 其中,n是使用寄存器的在其跨越的调用点前的基本块的数量, 其中,n是使用寄存器的在其跨越的调用点后的基本块的数量。 使用caller寄存器的代价 cost_idle_caller=before_costs+after_costs C13.使用空闲寄存器还会因为在不同寄存器之间进行通讯而引发新的代价。 所述收益为 benefit=cost_lr-IRE_cost 所述步骤C3还进一步包括步骤 C31.当采用空闲寄存器带来的收益大于其代价时,那么使用空闲寄存器类作为快速溢出空间的优化方法,将此空闲寄存器作为该溢出候选的溢出空间; C32.当采用空闲寄存器带来的收益小于其代价时,那么不使用空闲寄存器类作为快速溢出空间的优化方法,仍然选择原有的内存溢出方式进行溢出,即以内存作为该溢出候选的溢出空间。 本专利技术的有益效果是 (1)本专利技术可以有效改善寄存器短缺带来的访存问题; (2)本专利技术采用优化空闲寄存器的方法后,使得对通信指令的优化较对访存指令的优化更为简单; (3)本专利技术通过实验发现,硬件上不同寄存器之间的通讯代价是决定本专利技术性能好坏的主要原因之一,为将来处理器的设计提供了参考依据。 附图说明 图1是的结构图; 图2是使用gprof命令运行插桩后的应用程序的各个函数的信息表; 图3是的性能对比图。 具体实施例方式 为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术的进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。 本专利技术的,充分利用了目前很多处理器提供的硬件支持,将空闲的不同类别的寄存器用作当前短缺寄存器的溢出空间,从而避免和降低了原有溢出访存代码带来的诸多缺点。 其中,所述很多处理器提供的硬件支持,是指很多处理器都提供了在不同类寄存器之间进行直接通讯的指令支持。例如AMD opteronTM,Alpha 21264,MIPS R4000,龙芯-2E,Intel PentiumIII及其后代寄存器。 本专利技术要解决的技术问题包括 1.对一个应用程序的溢出代价进行分析,评估其对该应用程序性本文档来自技高网...

【技术保护点】
一种使用空闲寄存器类作为快速溢出空间的优化方法,其特征在于,包括下列步骤:    A.计算活跃区间的溢出代价并采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估;    B.在原有寄存器分配中,为每个应用程序确定合适的访存延迟值;    C.使用静态分析的结果以及新的访存延迟建立代价模型,计算使用空闲寄存器类作为快速溢出空间可能带来的收益和代价,并根据计算结果选择是否使用所述使用空闲寄存器类作为快速溢出空间的优化方法。

【技术特征摘要】
1.一种使用空闲寄存器类作为快速溢出空间的优化方法,其特征在于,包括下列步骤A.计算活跃区间的溢出代价并采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估;B.在原有寄存器分配中,为每个应用程序确定合适的访存延迟值;C.使用静态分析的结果以及新的访存延迟建立代价模型,计算使用空闲寄存器类作为快速溢出空间可能带来的收益和代价,并根据计算结果选择是否使用所述使用空闲寄存器类作为快速溢出空间的优化方法。2.根据权利要求1所述的方法,其特征在于,所述步骤A还进一步包括步骤A1.计算活跃区间的溢出代价;A2.采用插桩工具以及静态分析汇编代码相结合的方式对应用程序中的溢出代价进行评估。3.根据权利要求1或2所述的方法,其特征在于,所述活跃区间,是指在程序中,每个变量拥有的自己的活跃范围。4.根据权利要求1或2所述的方法,其特征在于,所述活跃区间,是由活跃单元组成,活跃单元与候选变量活跃的基本块一一对应。5.根据权利要求4所述的方法,其特征在于,所述基本块,是由一定数量的指令组成。6.根据权利要求2所述的方法,其特征在于,所述计算活跃区间的溢出代价,包括下列步骤A11.计算每个活跃单元的溢出代价costi=(ld_cycle×ld_numexp_use+st_cycle×st_numlive_out)×freq;A12.计算每个活跃区间的溢出代价其中n是活跃单元的数量。7.根据权利要求2所述的方法,其特征在于,所述步骤A2还进一步包括步骤A21.采用gcc提供的插桩工具统计出每个应用程序的热函数;A22.分析步骤A21统计出的热函数,计算热函数中的溢出代码代价,并将其作为整个应用程序的溢出代价进行分析。8.根据权利要求7所述的方法,其特征在于,所述热函数的溢出代价,是由热函数中所有基本块的溢出代价组成。9.根就权利要求8所述的方法,其特征在于,所述基本块的溢出代价,是由所述活跃区间溢出时在此活跃区间的活跃单元需要插入的保存和恢复访存指令组成。10.根据权利要求7所述的方法,其特征在于,其中步骤A22中,所述的分析,是指根据溢出插入的访存与程序中所有访存操作的比值,判断溢出对程序造成的影响,其中,mi是基本块在第i个程序单元的数量,n是程序单元的数量。11.根据权利要求10所述的方法,其特征在于,所述比值越大,说明溢出所占访存比重较高,所述使用空闲寄存器类作为快速溢出空间的优化方法越有可能发挥较好效果。12.根据权利要求1所述的方法,其特征在于,所述步骤B还进一步包括B1.采用一级缓存命中时间来设置保存的延迟时间;B2.采用ld_cycle_cache来设置恢复的延迟时间,其中ld...

【专利技术属性】
技术研发人员:吕方冯晓兵杨扬张超王蕾
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1