经典的基于图着色模型的寄存器分配
来源:互联网 发布:核聚变进展知乎 编辑:程序博客网 时间:2024/06/08 06:35
经典的基于图着色模型的寄存器分配:
1、如果变量(在指令/语句序列中,或称程序“基本块”?)不再被use(def也是use),则它dead
2、否则变量live(活着)
3、如果2个变量在一个block/program中都是live,则不能赋以相同的寄存器,在对应的RIG(register inference graph)中,在这2个变量节点之间连接一条边
由上面的描述可以看到,这里的寄存器分配实际上是一个全局算法。并不是只针对单个basic block的。
OK,设限制为k个寄存器,则寄存器分配问题转换为RIG的k-着色问题。NP-hard。
评论:这里的寄存器分配似乎没有涉及到IR?并且是把程序代码中的变量直接映射为机器物理寄存器?对于早期的偏重于数值计算的Fortran语言来说,当然很合理。但是现代语言早已不是这个样子的了:OOP、并发、FP、VM、IR、SSA。那么关于上面的基本约束:如果2个变量同时live,则不能赋以相同寄存器。这条约束是否还有意义呢?
基于图着色模型的寄存器分配算法仅仅是个理论模型,实际所谓的最优并不可能达到,从而需要使用某些启发式。既然如此,为什么不一开始就直接使用某些实用的固定规则呢?假如这样得到的寄存器分配效率并不差多少?
Spilling:将(全局范围的)变量分配到内存而不是寄存器,这样每次用到时都需要先load最后将更新后的值store回去。这将使得一个大的program可以拆分为多个小的sub range,每个range内可使用更少的k-着色。(不过这种思路实在有点见鬼,为什么不在一开始就直接利用利用启发式这么做呢?非得等全局的图着色寄存器分配算法分析过后再rollback?)
- 经典的基于图着色模型的寄存器分配
- 寄存器的分配
- 经典算法问题 之 图的m-着色判定问题
- 基于几何着色器的模型“爆炸”效果(Geometry Shader)【OpenGL】【GLSL】
- 基于图的模型
- 基于图的模型
- 一个国产编译器的寄存器分配试验
- VS和PS寄存器的分配
- 64位寄存器分配的不同
- 图的点着色、区间着色问题及其应用(基于贪心思想的DFS回溯法求点着色问题和区间着色算法求解任务调度问题)
- 基于栈与基于寄存器的区别
- 基于栈和基于寄存器的虚拟机
- 基于寄存器与基于栈的虚拟机
- 迪斯尼中基于物理的着色
- 经典的消费者生产者模型——基于BlockingQueue
- 图的m着色
- 图的着色问题
- 图的着色问题
- dojo CheckBox问题解析
- iOS的开发中的错误解决方案
- [LeetCode]047-Permutations II
- 屏幕适配
- python的正则表达式re模板
- 经典的基于图着色模型的寄存器分配
- Dubbo源码分析(六):Dubbo内核实现之动态编译
- debug时按F8/F6不起作用
- Linux/Unix inode、vnode、dentry、file、进程表、文件表(下)
- sqlite数据库部署到服务器上的问题
- iOS vs Android 系统架构
- android--contentPrivider的mime类型
- 第43讲——项目1(2)
- UFLDL 教程学习笔记(一)神经网络