[发明专利]基于区域优先级的寄存器分配方法有效
| 申请号: | 201310172629.X | 申请日: | 2013-05-10 |
| 公开(公告)号: | CN103324463A | 公开(公告)日: | 2013-09-25 |
| 发明(设计)人: | 庞建民;单征;刘晓楠;岳峰;金久真;梁光辉 | 申请(专利权)人: | 中国人民解放军信息工程大学 |
| 主分类号: | G06F9/30 | 分类号: | G06F9/30 |
| 代理公司: | 郑州大通专利商标代理有限公司 41111 | 代理人: | 陈勇 |
| 地址: | 450002*** | 国省代码: | 河南;41 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 区域 优先级 寄存器 分配 方法 | ||
(一)、技术领域:本发明涉及一种寄存器分配方法,特别是涉及一种基于区域优先级的寄存器分配方法。
(二)、背景技术:寄存器分配阶段决定程序中间表示中的变量分配给寄存器还是内存,是编译器最基本和最重要的阶段之一。追求高质量的生成代码一直是寄存器分配的首要目标,但随着即时编译器的发展,寄存器分配的速度也成为衡量编译器性能的一个重要因素。传统的寄存器分配方法主要是线性扫描算法和图着色的方法,这两种方法均不能同时达到代码质量和分配速度两个方面的高要求。线性扫描算法通过顺序遍历程序的每一条指令来给生命域分配物理寄存器,从而在线性时间内完成分配,但这种方法产生的代码质量依赖于指令顺序、生命域的精确程度、启发式的溢出方法和生命域的分裂位置等因素,因此代码质量一般不高。图着色算法把变量生命域之间的关系表示为干涉图,节点表示变量,边表示两个变量的生命域之间有干涉,进而将寄存器分配问题转换为图着色问题。这是一种精确的刻画,但是图着色问题被认为是NP完全问题(Non-deternibisticPolynomial,多项式复杂程度的非确定性问题),即便是在SSA(StaticSingleAssignment,静态单任务赋值)形式下的干涉图是弦图,问题仍需要多项式时间的解,而且需要创建复杂的生命域结构,这在时间空间上带来了很大的压力。
当前的即时编译器仍采用了线性扫描的算法,但做了很多改进,Java HotSpotTM将线性扫描算法在SSA上进行了实现,采用了寄存器分配后析构phi节点等方法;LLVM(Low Level Virtual Machine,低级虚拟机)在3.0版本之前也采用了改进的线性扫描算法,在寄存器传送合并、保留寄存器的消除、溢出代码融合等方面做了优化,且取得较好的代码执行速度。但是,线性扫描算法受本身线性顺序的制约,无法对代码进行更为高级的优化。LLVM3.0版本提出了一种贪婪式的基于加权优先队列的寄存器分配方法,替换了线性扫描算法,代码速度更快,但目前还没有相关详细数据发布。其它一些研究集中于寻求理论上较为完美的寄存器分配方法,如最优化的寄存器溢出、启发式的分配方法、分配修复的策略以及分层的分配等方法。但是这些方法通常面临较大的时间压力,不适用于即时编译器。
寄存器分配时溢出代码的位置以及灵活性往往比分配更为重要。线性扫描算法固定的模式不利于实施更灵活的优化。为改进现有的即时编译器寄存器分配方法,一种没有固定的分配顺序、不创建显式的干涉图、更细粒度的生命域分裂、以分裂来驱动分配而不是分配来决定分裂的更灵活的寄存器分配方法成为新的设计要求和目标。
(三)、发明内容:
本发明要解决的技术问题是:克服现有技术的缺陷,提供一种分配速度快、产生代码质量高的基于区域优先级的寄存器分配方法。
本发明的技术方案:
一种基于区域优先级的寄存器分配方法,具体含有下列步骤:
步骤1:将寄存器分配问题转换为一种矩阵填充模型;
步骤2:设计贪婪式的填充方法,用该贪婪式的填充方法将一个空的矩阵填充为一个满足要求的非空矩阵;该贪婪式的填充方法的贪婪性存在于划分循环区域、构建长度优先级队列和溢出权重优先级排队的过程中;
步骤3:根据步骤2的填充来实现寄存器的分配。
在进行所述步骤1的工作时,首先定义下列名词:
指令序号:指令序号x是指程序段中的每条指令的编号(1≤x≤N,N表示程序最后的指令编号);基本块内的指令顺序是固定的,基本块之间的指令顺序是任意的,在步骤1中,采用基于深度优先遍历形成的控制流图来对指令进行排序;
变量的活跃范围:变量v的活跃范围是一个间隔[i,j](1≤i≤j≤N,1到N表示整个程序指令的编号),在此间隔内,变量v是活跃的,必须为变量分配一致的存储位置;
变量生命域间隔:变量v生命域间隔是由多个不连续的活跃范围组成的间隔,不连续的活跃范围之间的区域是生命域间隙,在生命域间隙中,变量v不活跃;
变量的溢出代价:变量v的溢出代价cv是对变量分配到内存中所引起的性能损失的抽象表示,变量的溢出代价用变量v所在指令的执行频率来表征,指令执行次数多的情况下,访存次数相应增多,性能损失越厉害,因此溢出代价也就越大;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军信息工程大学,未经中国人民解放军信息工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310172629.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种语音处理方法、装置及系统
- 下一篇:金刚石水泥磨盘





