存储单元模拟
翻译信息的存放
二进制翻译完成指令的基本翻译后,还要把翻译完的信息(源机器平台中寄存器和其状态)部署在目标机器上(实现镜像),等价模拟源平台的寄存器和内存等存储单元
镜像部署的解决方案
(1)开辟一块内存空间做镜像映射
开辟内存空间的方法屏蔽了寄存器使用差异, 实现简单
缺点:会引发大量的访存代价
(2)利用硬件支持寄存器映射
优点:效率较高,
缺点:但不同处理器平台中寄存器数量和使用约定各异, 很难实现寄存器的全部映射. 尤其是源平台寄存器数量多于目标平台时, 必然有部分源机器平台中的寄存器要被映射到内存单元中, 涉及寄存器映射收益和映射代价选择问题
寄存器的映射收益和映射代价选择问题(寄存器的优化)
其他寄存器优化方法
例子:x86_64平台有16个通用寄存器,riscv64平台有32个通用寄存器。如果是riscv64到x86_64的二进制翻译,即源平台是riscv64、目标平台是x86_64,那么目标平台的通用寄存器数量就少了16个,没法一对一映射
(1) 针对源平台寄存器数量多于目标平台的情况, 提出将目标平台向量寄存器的低位与源平台寄存器进行映射, 缓解目标平台寄存器数量不足的问题
PS:如果不使用映射技术,向量寄存器的低位主要用于存放直接参与计算的核心数据、临时结果、指针、状态信息以及一些常量,总之寄存器的低位非常宝贵,放的都是常用的东西,以便减少上下文切换和数据传输,节省时间
映射:指将一个平台的寄存器使用方式调整为适应另一个平台的一种策略
该技术:将源平台的寄存器内容映射到目标平台的向量寄存器低位部分
即,直接把源平台的寄存器放到目标平台的核心位置,减少上下文切换和数据传输
(2)根据不同算法确定寄存器优先级, 以保证寄存器资源的利用率
(3)对基本块内中间指令的寄存器需求次数进行排序, 优先为排序靠前的变量分配寄存器
这样可以高寄存器的利用率,减少内存访问的频率
(4)对代码映射区域进行访存频率排序, 提出优先对引发高频率访存的代码区域执行寄存器映射, 保证了寄存器映射资源的利用率最大化