在MIPS ISA中,有一个零寄存器($r0
),它总是给出零值。这允许处理器:
0
据说source这提高了CPU的速度。它如何提高性能?为什么不是所有的ISA都采用这个零寄存器的原因是什么?
$ r0 不是通用目的。无论你是什么,它都是硬连线 对这个寄存器来说,它的值总是为0.你可能想知道为什么 MIPS需要这样的寄存器。
MIPS的设计者使用了基准测试(程序用于确定 CPU的性能,使他们确信拥有一个寄存器 硬连线到0会改善CPU的性能(速度) 反对没有它。不是每个人都同意硬连线注册 0是必不可少的,因此并非所有的ISA都具有零寄存器。
答案 0 :(得分:5)
有一些潜在的方法可以提高性能;它不清楚哪些适用于那个特定的处理器,但我已经大致按照从大多数到最不可能的顺序列出它们。
答案 1 :(得分:3)
对于您的每件商品,这是一个答案。
0x00000000
,相当长)然后使用它。因此,一条指令也被削减了,并且还有一些程序大小。这些优化可能看起来有点微不足道,可能会提出这样一个问题:“这实际上有多大改善?”这里的答案是上面描述的操作显然在MIPS处理器上使用了很多。
答案 2 :(得分:1)
零寄存器的概念并不新鲜。我第一次在CDC 6600大型机上遇到过它,可以追溯到1960年代中后期。在某些方面,它是最早的RISC处理器之一,并且是5年来世界上最快的计算机。在该架构中,“B0”寄存器硬连线始终为零。 http://en.wikipedia.org/wiki/CDC_6600
这种寄存器的好处主要在于简化了指令集。当简单和常规指令集的解码和编排可以在没有微码的情况下实现时,它可以提高性能。此外,对于像今天大多数LSI芯片一样的6600,信号传输长度为“线”的时间成为执行速度的关键因素,并且保持指令集简单(并避免微码)允许更少的晶体管,并导致更短的电路路径。
答案 3 :(得分:1)
零寄存器允许在设计新寄存器时保存一些操作码 指令集体系结构(ISA)。
例如,main RISC-V spec具有32条伪指令 取决于零寄存器(参见表26.2和26.3)。伪指令是 汇编程序映射到另一个实数的指令 指令(例如,将等于零的分支映射到 如果相等则分支)。为了进行比较:RISV-V主要规格列表164 实际指令操作码(即计数RV(32 | 64)[IMAFD]基数/扩展名,又称RV64G)。这意味着如果没有零寄存器,则RISC-V RV64G将为这些指令占用更多的32个操作码(即增加20%)。对于具体的RISC-V CPU 实现中,该实伪指令比率可能会向任一方向移动 取决于选择的扩展名。
较少的操作码可简化指令解码器。
更复杂的解码器需要更多时间来解码指令 或占用更多的门(不能用于更有用的CPU单元) 或两者兼有。
现有的,增量开发的ISA必须处理 向后兼容。因此,如果您的原始ISA设计 不包含零寄存器,您不能稍后再添加 修订而不会破坏兼容性。另外,如果您现有的 ISA已经需要非常复杂的解码器,然后添加零 注册没有回报。
除了现代RISC-V ISA(自2010年以来首次 2019年批准),ARMv8 AArch64(2011年发布的64位ISA), 与以前的ARM 32位ISA相比,该寄存器还具有零寄存器。由于这个和其他变化 AArch64 ISA与以前的ARM 32位有很多共同点 ISA而不是x86和x86-64 ISA。
与AArch64相比,x86-64 没有零寄存器。尽管x86-64比 以前的32位x86 ISA,其ISA只是增量更改。 因此,它具有所有现有的x86操作码以及64位功能 变体,因此解码器已经非常复杂。