寄存器重命名

寄存器重命名是计算机CPU的微体系结构（Microarchitecture）中的一种技术，避免了机器指令或者微操作不必要的顺序化执行，从而提高了处理器的指令级并行的能力。

细节：保留站

这种重命名模式用于AMD K7与K8的整数寄存器设计。
在重命名阶段，作为源操作数的体系结构寄存器在远期寄存器堆与重命名文件中查找对应的物理寄存器。如果没有写指令还没有完成写入该物理寄存器，则说明这个源操作数已经就绪。当这条指令被放入发射队列，从远期寄存器堆相应的物理寄存器读出内容放入保留站中对应的条目。指令对目的寄存器的写入，在重命名文件中的产生了一个新的、未就绪的tag。tag数通常是按照指令的顺序分配，因此不需要空闲tag先进先出队列。
如同tag索引模式，发射队列中的未就绪操作数等待匹配的tag公告。但不同于tag索引模式，tag的匹配导致对应的内容数据写入发射队列对应的保留站的条目。
被发射的指令从保留站读取它的操作数，忽略掉那些刚刚公告过的操作数，然后开始执行。保留站寄存器堆通常很小，可能只有8个条目。
指令执行结果写入重排缓冲区，以及保留站（如果发射队列有匹配的tags），以及远期寄存器堆。
指令引退时，复制重排序缓冲区中的值到体系结构寄存器堆。体系结构寄存器堆用于从异常或者分支预测失败时恢复。
在指令引退时可以识别出异常与分支预测失败，引起体系结构寄存器堆覆盖掉远期寄存器堆的内容，并标记重命名文件中所有寄存器都是就绪。通常，没有办法为一条处于解码与引退之间的指令恢复远期寄存器堆，因此通常没有办法在更早期为分支预测失败做恢复工作。

比较两种模式

在两种模式下，指令被顺序送入发射队列，但从发射队列移出是乱序的。
保留站具有更好的延迟（latency）性能。因为重命名阶段直接获得寄存器内容，而不是获得物理寄存器号，再用这个号去获得内容值。
保留站具有更好的从指令发射到执行的延迟性能。因为每个本地寄存器堆远小于那种大型的用tag索引的中央寄存器堆。tag产生与异常处理也更为简单。
与tag索引的简单的寄存器堆相比，保留站的物理寄存器堆的总规模更大，功耗更大，更为复杂。更糟糕的是，每个保留站的每个条目可以被每条结果总线写入。例如，每个功能单元具有8条发射队列条目的处理器，相比于tag索引的模式有9倍的旁路网络，结果直通（forwarding）需要更大的功耗与面积。
保留站模式在4个位置（远期寄存器堆，保留站，重排序区、系统结构寄存器堆）保存结果值。而tag索引模式只需要在物理寄存器堆保存结果值。由于结果值来自功能单元，保留站模式必须公告结果到许多存储位置，用掉了非常多的功耗、面积、时间。如果处理器具有非常精确的分支预测、非常关注执行延迟，保留站也是个很好的选择。

历史

IBM System 360 Model 91是早期支持乱序执行的计算机。它使用Tomasulo算法用到了寄存器重命名。
1990，POWER1是第一种使用了寄存器重命名与乱序执行的微处理。
最初的R10000设计既没有发射队列压偏（collapsing），也没有可变优先权编码，因此遇到了寄存器资源饿死（starvation）—最老的指令在队列中一直没有被发射，直到解码指令因为缺乏可重命名的物理寄存器而完全停顿，而所有就绪指令都已经发射了。后来修改设计的R12000使用了部分可变优先级编码来克服此问题。
早期乱序执行处理器并不区分重命名与重排序缓冲区/物理寄存器堆的功能。因此，某些最早期的产品，如Sohi的RUU，Metaflow DCAF，组合了调度、重命名，存储在一个结构中。
大多数现代处理器的重命名使用了一个映射表，用逻辑寄存器号去索引。例如Intel P6微体系结构。远期寄存器堆也是如此，并在此存放数据。
但是，更早的处理器使用内容寻址存储技术实现重命名，例如HPSM RAT，以及存储器别名表（Register Alias Table）。
某种程度上，乱序执行的微体系结构的故事就是这些内容寻址存储如何逐步被清除。
Intel P6微体系结构是Intel处理器中第一种乱序执行、寄存器重命名。P6发展出了Pentium Pro、Pentium II、Pentium III、Pentium M、Core、Core 2等处理器系列。