零寄存器如何提高性能?

问题描述 投票:4回答:4

在MIPS ISA中,存在一个零寄存器($r0),该寄存器始终提供零值。这使处理器可以:

  1. 任何产生要丢弃结果的指令都可以将其目标定向到该寄存器
  2. 成为0的来源

在此source中说,这提高了CPU的速度。它如何提高性能?为何并非所有ISA都采用该零寄存器的原因是什么?

$ r0不是通用的。硬连线为0。无论您做什么对此寄存器执行操作,它的值始终为0。您可能想知道为什么MIPS需要这样的寄存器。

MIPS的设计者使用了基准(用于确定CPU的性能),这使他们确信拥有寄存器硬连线为0会提高CPU的性能(速度),因为反对没有它。并非所有人都同意硬注册到0是必不可少的,因此并非所有的ISA都有零寄存器。

mips cpu-registers instruction-set
4个回答
7
投票

有一些潜在的方法可以提高性能;尚不清楚哪种处理器适用于该特定处理器,但我已按从大到小的顺序大致列出了它们。

  1. 它避免了虚假的管道停顿。如果没有显式的零寄存器,则必须取出一个寄存器,将其归零,然后使用其值。这意味着使用零的操作取决于清零操作,并且(取决于流水线转发系统的功能)可能取决于清零寄存器的先前值。像x86这样的体系结构具有非常小的危害分析工具,这些体系结构的寄存器文件非常小,并且基本上对其寄存器进行虚拟化处理,以防止出现问题。 RISC处理器通常并非如此。
  2. 如果某些操作可以避免读取寄存器,则它们可能更具流水线性。如果使用显式零寄存器,则操作数将为零的事实在指令解码阶段就已知道,而不是在寄存器提取阶段以后才知道。因此,可以跳过寄存器读取阶段。
  3. 类似地,显式丢弃结果的能力避免了寄存器写阶段的需要。
  4. [某些操作的操作数之一已知为零,或者已知结果被丢弃时,某些操作可能会生成更简单的微代码。
  5. 显式零寄存器减轻了编译器优化器的压力,因为它不需要特别注意其寄存器分配(无需识别不会在读取或写入时造成停顿的寄存器。)>

3
投票

对于您的每个项目,这是一个答案。


2
投票

零寄存器的概念不是新概念。我第一次在CDC 6600大型机上遇到它,它的历史可以追溯到1960年代中期。在某些方面,它是最早的RISC处理器之一,并且是5年以来世界上最快的计算机。在该体系结构中,“ B0”寄存器被硬接线为始终为零。 http://en.wikipedia.org/wiki/CDC_6600


0
投票

零寄存器允许在设计新寄存器时保存一些操作码指令集架构(ISA)。

© www.soinside.com 2019 - 2024. All rights reserved.