在 MIPS ISA 中,有一个零寄存器($r0
) 始终给出零值。这允许处理器:
- 任何产生要被丢弃的结果的指令都可以将其目标定向到该寄存器
- 成为一个来源
0
据说在这source https://web.archive.org/web/20170328171837/http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Overall/instruction.html这提高了CPU的速度。它如何提高性能?那么为什么不是所有的ISA都采用这个零寄存器呢?
$r0不是通用目的。它被硬连线到 0。无论你做什么
对此寄存器执行操作,它的值始终为 0。您可能想知道为什么
MIPS 中需要这样的寄存器。
MIPS 的设计者使用基准(用于确定
CPU 的性能),这让他们相信有一个寄存器
硬连线为 0 将提高 CPU 的性能(速度),如下所示
反对没有它。并非所有人都同意将寄存器硬连线到
0 是必不可少的,因此并非所有 ISA 都有零寄存器。
有一些潜在的方法可以提高性能;目前尚不清楚哪些适用于该特定处理器,但我已按照从最有可能到最不可能的顺序粗略地列出了它们。
- 它避免了虚假的管道停顿。如果没有显式的零寄存器,则需要获取一个寄存器,将其清零,然后使用它的值。这意味着归零操作取决于归零操作,并且(取决于流水线转发系统的强大程度)可能取决于归零寄存器的先前值。像 x86 这样的架构具有非常小的寄存器文件,并且基本上虚拟化其寄存器以防止其引起问题,并且具有极其强大的危险分析工具。对于 RISC 处理器来说,情况通常并非如此。
- 如果某些操作可以避免寄存器读取,那么它们可能会更加流水线化。如果使用显式零寄存器,则在指令解码阶段知道操作数为零的事实,而不是稍后在寄存器获取阶段知道。因此,可以跳过寄存器读取阶段。
- 类似地,显式丢弃结果的能力避免了对寄存器写入阶段的需要。
- 当已知某些操作的操作数之一为零或已知结果将被丢弃时,某些操作可能会生成更简单的微代码。
- 显式零寄存器减轻了编译器优化器的一些压力,因为它不需要小心地分配寄存器(不需要识别不会导致读取或写入停顿的寄存器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)