2023.08.30
Introduction
TODO: race-free所谓的race是啥,为啥会产生?
2020.1.15
Low Overhead Dynamic Binary Translation on ARM
文章的启示
- 寄存器映射,loongISA2.0定点/浮点寄存器数量不变,没问题
- load/store模式的溢出边界
- TB link,因为loongISA准备做地址不变的静态翻译,所以没这个问题
- 精确中断(信号?),loongISA2.0的scratchpad支持吗?
Abstract
ARMv8处理器引入了64位模式,大多数ARMv8处理器也同时在硬件上支持32位模式。所以能够在同一处理器上比较,
- 硬件直接执行32位程序,
- 动态二进制翻译执行32为程序,
在顺序执行的Cortex-A53上测试SPEC CPU2006,动态二进制翻译的性能损失低于7.5%。
在乱序执行的X-Gene 1上测试SPEC CPU2006,动态二进制翻译的性能提升了1%。
Introduction
一些32/64的区别:
- AArch64的浮点寄存器比AArch32少;
- 访存模式不完全相同:地址计算溢出,因为load/store指令挺多的,且只有极少数的情况会有地址计算溢出,为了不让翻译的指令变多,由内核保证访问溢出的地址时保存,并用正确的方式处理。
间接地址跳转使性能降低,trace compilation?使性能提升。