ARM为什么只有16个寄存器?这是理想的数量吗?
拥有更多寄存器的寄存器距离是否会增加处理时间/功耗?
ARM为什么只有16个寄存器?这是理想的数量吗?
拥有更多寄存器的寄存器距离是否会增加处理时间/功耗?
(他们使用27作为基数,因为这是MIPS处理器上可用的GPR数量)Register Program Load/Store Count Size Frequency
27 100.00 27.90%
16 101.62 30.22%
8 114.76 44.45%
可以看到,当你将寄存器数量降至16时,两个程序的大小和所需的加载/存储数量仅有微小的改进。直到你降至8个寄存器时,真正的惩罚才会开始。我猜ARM设计师认为,在寻求每瓦最佳性能时,16个寄存器是一种理想的平衡点。
ARM 的独特之处在于每个寄存器都可以具有条件执行代码,避免了测试和分支。不要忘记,许多 32 位寄存器机器将 R0 固定为 0,因此通过与 R0 进行比较来进行条件测试。我从经验中知道。20 年前,我不得不编写一个“Mode 7”(来自 SNES 术语)地板的程序。CPU 分别是 SH2 (32x 中的两个),MIPS3000 (Playstation) 和 3DO (ARM),代码的内部循环分别为 19、15 和 11。如果 3DO 运行速度与其他两个相同,那么它将是两倍的速度。但事实上,它只稍微慢一些。