动态二进制翻译系统中超级块的寄存器分配方法技术方案

技术编号:3814291 阅读:313 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种动态二进制翻译系统中超级块的寄存器分配方法,是一种根据二进制翻译系统超级块的特性简化了的图染色寄存器分配方法。利用超级块内变量的活性信息构造干扰图,然后把寄存器分配问题转化为干扰图的精简问题,使得超级块的目标代码能够最大限度的使用目标平台寄存器,具有目标代码执行效率高的特性。分配时根据动态二进制翻译领域的不同需要对基本块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求非特定寄存器分配。本发明专利技术具有可重定向特性,对于超级块具有分配效果好、分配开销低的特点,适用于多种目标平台,尤其适用于多源多目标的二进制翻译平台。

【技术实现步骤摘要】

本专利技术涉及一种,具备重定 向特性,能适用于多种目标平台,尤其适用于多源多目标的二进制翻译平台。
技术介绍
动态二进制翻译是虚拟执行技术中应用最为广泛的方法,是为遗留代码提供 移植可能性和提高软件的平台适应性的一种有效手段,它在不需要可执行程序 的源代码的情况下,可以动态地将源机器平台上的二进制程序经过转换,运行 于其他目标机器平台上。对于动态二进制翻译器自身而言,执行性能是一个非 常重要的衡量指标。所谓执行性能是指,以源程序在原架构下运行的效率为参 照,其在动态二进制翻译器提供的运行环境下的效率损失度越低,翻译器的执 行性能越好。寄存器在计算机存储体系结构里处于最上层,是访问速度最快的存储介质, 而且由于芯片大小的限制,通常寄存器数目不多,Intel的x86处理器只有8个 通用寄存器,有些RISC体系结构的寄存器数目稍多一些,但也只有几十个左右 的寄存器,当然里面还包含很多特殊寄存器,能够被翻译器使用的就更少了。为 了提高翻译器翻译后的代码的执行性能,动态二进制翻译领域需要采用一种技 术,它使得翻译后的代码块能够尽可能高效的利用寄存器这一稀缺资源。但是 对于动态二进制翻译领域,考虑到动态执行的实时性,分配方法开销不能太高。 因此技术人员必须在更高效的使用目标平台的寄存器和分配开销之间寻求平 衡。动态二进制翻译领域通常会有构造超级块的技术,即把一些执行热度比较 高的基本块合起来,作为一个块进行编码,形成一个超级块。所谓超级块,是 指具有一个入口, 一个或多个出口的代码块。对于超级块内的寄存器的分配, 由于其执行的热度较高,对目标代码的质量要求也更高,因此需要采用一种优 良的寄存器分配方法。目前,在动态二进制翻译领域可以使用如下方法完成寄存器分配任务-1、 简单的寄存器分配方法,这种分配算法通过对超级块内的变量号按目标 机寄存器数目进行一次取模运算,得出的数字即是被分配的寄存器编号。如果 该寄存器被同一条指令的其他变量占用,则尝试下一个编号的寄存器。如果该 寄存器没有被同一条指令内的其他变量占用,则把该寄存器内容交换到内存, 然后分配该寄存器给当前变量。如果该寄存器空闲,直接分配该寄存器给当前 变量。这种方法简单有效,开销小,适用于动态二进制翻译领域的及时性特性, 但没有利用超级块内变量的信息,使得分配结果不够高效,寄存器使用效率不咼。2、 全局寄存器分配方法,这种方法把超级块常用的一些变量存放在全局寄 存器中。全局变量是指在这个基本块内被使用次数(use-frcquency)最多的那个 变量,把这些变量存放在某些寄存器中,在整个超级块的生存期,对它们都不 做替换。这种方法需要在分配前,先走査一下整个超级块,收集超级块内所有 变量的使用频率信息。然后分配一些固定的寄存器给这些使用频次最高的变量, 其余变量使用简单的寄存器分配方法进行分配。这种方法利用了超级块内变量 的信息,但使用不够充分,只在开始阶段利用收集到的信息固定分配了若干变 量,对后续变量的分配过程则完全丢弃了这些信息。3、 基于next-use信息的寄存器分配方法,这种方法根据超级块内变量的 next-use信息进行寄存器分配,所谓next-use信息是指该变量下次被使用的位 置,这种方法简单有效,适用于基本块内寄存器分配。对于由若干基本块组成 的超级块,对变量信息的使用不够充分,寄存器的分配结果不够高效。4、 图染色分配方法,这种方法在静态编译器领域有着重要的地位,它是一 种基于图简化思路的启发式分配方法。它包括如下几个步骤(1) 变量活性信息的收集(2) 干扰图的构造(3) 图精简以及寄存器分配在静态编译器里,干扰信息的收集过程通常会经过多次迭代,才能达到稳定, 即活性信息在每个节点都不再变化。在图精简过程中遇到图不能再精简的情况下通常会采用结合、冷冻、选择溢出和实际溢出等各种高级手段来完善图精简 的过程。该方法复杂度太高,分配开销太大。从上述的四种寄存器分配方法可以看出,每种方法都有其固有的优缺点,四 者收集并利用信息的丰富程度呈递增趋势,同时,分配开销和实现复杂度也随 之增加。对于前两种寄存器分配方法,实现较简单,但是利用超级块内变量的 信息十分有限,不能达到有效的效果。第三种在分配结果与分配效率上对于一 个基本块达到了较好的折衷。最后一种方法充分利用了收集到的信息,对于静 态编译器将是最好的方法,在动态二进制翻译领域,在一个超级块内,按照此 种分配方法所得到的寄存器使用效率的提高还不足以弥补为达到这种效果所付 出的分配开销。因此需要专利技术一种新型的适用于动态二进制翻译中超级块的寄存器分配方 法,既能有效的利用超级块内变量的信息,产生良好的分配结果,又不能有太 多分配开销。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种动态二进制翻译系统中超 级块的寄存器分配方法,满足动态二进制翻译器领域中超级块的寄存器分配的 特殊需求,比如二进制翻译系统对分配开销的敏感性,在分配开销和分配结果 中达到折衷。为实现上述目的,本专利技术设计的一种寄存器分配方法,是一种根据二进制 翻译系统超级块的特性简化了的图染色寄存器分配方法。因为分配对象是超级 块,在分配开销上要介于基于next-use的寄存器分配方法和传统的图染色寄存 器分配方法。它利用超级块内变量的活性信息构造干扰图,然后把寄存器分配 问题转化为干扰图的精简问题,使得超级块的目标代码能够最大限度的使用目 标平台寄存器,具有目标代码执行效率高的特性。本专利技术方法的作用位置动态二进制翻译器为了优化性能,通常会使用profile技术获取执行热路 径,并且构造超级块,在超级块构造的过程中需要调用本方法完成目标平台寄 存器的分配工作。本专利技术进行寄存器分配的具体步骤如下1) 初始化寄存器分配器的目标平台,包括目标平台的寄存器数目,目标平台 的寄存器之间的数据移动机器指令,内存到寄存器的数据移动机器指令以及寄 存器到内存的数据移动机器指令;2) 初始化寄存器分配器内部数据结构,包括初始化目标平台寄存器状态的 数据结构数据,所有目标平台寄存器状态设为空闲,所匹配的变量设为空,所 在指令设为空;初始化所有超级块变量所在位置为内存;清空用来存放超级块 指令干扰列表的队列;初始化用来存放单条指令里变量干扰信息的干扰列表为 空;初始化寄存器预分配结果表为空;3) 从每个超级块尾部到头部遍历,依次査看每条指令的变量,从中先找到 DEF类型的变量,査看干扰列表里是否有这个变量,如果有,则从干扰列表里移 除该变量,再找到USE类型的变量,查看干扰列表里是否有这个变量,如果没 有,则插入这个变量;遍历完这条指令的所有变量后,把干扰列表插入到队列 头部,并把该干扰列表作为产生下一条指令的干扰列表的基础,直到超级块的 第一条指令为止,得到超级块指令干扰列表组成的队列,完成干扰信息的收集;4) 初始化干扰图为不存在干扰边;从队首到队尾遍历超级块指令干扰列表 组成的队列,依次处理队列里的干扰列表,凡在同一个列表的两个变量,都在 干扰图里对应这对变量的位置记录一条干扰边;直到队列尾部的干扰列表被处 理,干扰图的生成过程结束;5) 通过干扰图査看每个变量的干扰边,如果干扰边数目少于目标平台寄存 器数目,则把该变量入栈,并本文档来自技高网
...

【技术保护点】
一种动态二进制翻译系统中超级块的寄存器分配方法,其特征在于包括如下步骤: 1)初始化寄存器分配器的目标平台,包括目标平台的寄存器数目,目标平台的寄存器之间的数据移动机器指令,内存到寄存器的数据移动机器指令以及寄存器到内存的数据移动机器 指令; 2)初始化寄存器分配器内部数据结构,包括初始化目标平台寄存器状态的数据结构数据,所有目标平台寄存器状态设为空闲,所匹配的变量设为空,所在指令设为空;初始化所有超级块变量所在位置为内存;清空用来存放超级块指令干扰列表的队列;初始 化用来存放单条指令里变量干扰信息的干扰列表为空;初始化寄存器预分配结果表为空; 3)从每个超级块尾部到头部遍历,依次查看每条指令的变量,从中先找到DEF类型的变量,查看干扰列表里是否有这个变量,如果有,则从干扰列表里移除该变量,再找到 USE类型的变量,查看干扰列表里是否有这个变量,如果没有,则插入这个变量;遍历完这条指令的所有变量后,把干扰列表插入到队列头部,并把该干扰列表作为产生下一条指令的干扰列表的基础,直到超级块的第一条指令为止,得到超级块指令干扰列表组成的队列,完成干扰信息的收集; 4)初始化干扰图为不存在干扰边;从队首到队尾遍历超级块指令干扰列表组成的队列,依次处理队列里的干扰列表,凡在同一个列表的两个变量,都在干扰图里对应这对变量的位置记录一条干扰边;直到队列尾部的干扰列表被处理,干扰图 的生成过程结束; 5)通过干扰图查看每个变量的干扰边,如果干扰边数目少于目标平台寄存器数目,则把该变量入栈,并删除干扰图里与该变量相关的干扰边,如果不少于目标平台寄存器数目,则查看下一个变量,如果干扰图里剩余变量的干扰边都不少于目标平 台寄存器数目,则选择其中一个变量作为牺牲变量,从干扰图里删除,并删除与之相关的干扰边;然后再查看下一个变量,直到干扰图所有变量入栈为止,干扰图简化过程结束; 6)从栈顶依次弹出变量,找到一个没有分配给与其存在干扰关系变量的寄存器,分配 给该变量,把结果记录在预分配结果表里;直到栈空为止,寄存器预分配结束; 7)根据不同翻译需要对超级块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求非特定寄存器分配; 8)对于普通分配,依次查看寄存器的状 态,如果有寄存器状态是已被分配,并且被分配的对象是该变量,则继续保持这种分配,否则查看预分配结果表;如果有寄存器分配给该变量,...

【技术特征摘要】

【专利技术属性】
技术研发人员:管海兵梁阿磊蔡战举姜玲燕李晓龙
申请(专利权)人:上海交通大学
类型:发明
国别省市:31[中国|上海]

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

1