Car*_*zer 8 arm cpu-architecture cpu-registers
为什么ARM只有16个寄存器?这是理想的数字吗?
具有更多寄存器的寄存器的距离是否也会增加处理时间/功率?
Bra*_*ley 17
随着通用寄存器的数量变小,您需要开始使用堆栈作为变量.使用堆栈需要更多指令,因此代码大小会增加.使用堆栈还会增加内存访问次数,从而影响性能和功耗.权衡的是,为了代表更多的寄存器,您需要在指令中使用更多的位,并且芯片上需要更多的空间用于寄存器文件,这会增加功耗要求.通过使用不同数量的寄存器编译同一组代码,您可以看到不同的寄存器计数如何影响代码大小和加载/存储指令的频率.这种练习的结果可以在本文表1中看到:
Register Program Load/Store
Count Size Frequency
27 100.00 27.90%
16 101.62 30.22%
8 114.76 44.45%
Run Code Online (Sandbox Code Playgroud)
(他们使用27作为基础,因为这是MIPS处理器上可用的GPR数量)
正如您所看到的,当您将寄存器数量降至16时,程序大小和加载/存储数量都只有微小的改进.真正的惩罚在您下降到8个寄存器之前不会启动.我怀疑ARM设计师认为当你寻找每瓦最佳性能时,16个寄存器是一种最佳点.