<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Computer Architecture on Feng's Notes</title><link>https://zlh20040308.github.io/categories/computer-architecture/</link><description>Recent content in Computer Architecture on Feng's Notes</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 02 Oct 2026 14:26:23 +0800</lastBuildDate><atom:link href="https://zlh20040308.github.io/categories/computer-architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>CAM-based RAT 的 Checkpoint 为什么只需保存 valid bit</title><link>https://zlh20040308.github.io/note/cam-based-rat-%E7%9A%84-checkpoint-%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%AA%E9%9C%80%E4%BF%9D%E5%AD%98-valid-bit/</link><pubDate>Fri, 02 Oct 2026 14:26:23 +0800</pubDate><guid>https://zlh20040308.github.io/note/cam-based-rat-%E7%9A%84-checkpoint-%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%AA%E9%9C%80%E4%BF%9D%E5%AD%98-valid-bit/</guid><description>&lt;h2 id="1-背景"&gt;1 背景&lt;/h2&gt;&#10;&lt;p&gt;最近在读《超标量处理器设计》。在寄存器重命名这一章中，作者介绍 CAM-based RAT 时提到它的一个优点：&lt;strong&gt;checkpoint 非常节省面积——每一行只需要保存一个 valid bit&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;这让我产生了疑问：为什么只保存 valid bit，而不需要保存 archRegID？&lt;/p&gt;&#10;&lt;p&gt;在我的直觉里，保存快照就应该像拍照一样，把整张 RAT 完整地记录下来。为什么到了 CAM-based RAT，只保存 valid bit 就够了？如果 archRegID 在这期间被改写了，只恢复 valid bit 岂不是会还原出错误的映射？&lt;/p&gt;&#10;&lt;h2 id="2-疑问的本质"&gt;2 疑问的本质&lt;/h2&gt;&#10;&lt;p&gt;把这个担忧说得更精确一些，我所害怕的场景是：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;从&lt;strong&gt;记录 checkpoint&lt;/strong&gt; 到&lt;strong&gt;该分支指令提交并通过 checkpoint 还原 RAT&lt;/strong&gt; 的这段时间内，会有其他指令把 archRegID 改写掉。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;那么问题就转化为：&lt;strong&gt;这种情况究竟会不会发生？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="3-关键前提archregid-何时会被改写"&gt;3 关键前提：archRegID 何时会被改写&lt;/h2&gt;&#10;&lt;p&gt;要回答上面的问题，首先需要明确 archRegID 在什么条件下会被改写。&lt;/p&gt;&#10;&lt;p&gt;答案是：&lt;strong&gt;只有当 rename 阶段需要建立一条新的映射时，才会在 RAT 的对应行写入 archRegID。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;而这个写入动作还有一个必要前提：&lt;strong&gt;目标物理寄存器必须是空闲的。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="4-结论"&gt;4 结论&lt;/h2&gt;&#10;&lt;p&gt;只要认识到&amp;quot;改写 archRegID 需要空闲物理寄存器&amp;quot;这一前提，上述担忧就可以排除，理由如下：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;记录 checkpoint 时，所有被标记为 valid 的 archRegID，都是由&lt;strong&gt;比该分支指令更旧的指令&lt;/strong&gt;写入的。&lt;/li&gt;&#10;&lt;li&gt;退休（retire）是&lt;strong&gt;顺序执行&lt;/strong&gt;的，因此后序指令若想改写这些 archRegID，必须先等这些旧指令退休，使对应的物理寄存器重新变为空闲状态。&lt;/li&gt;&#10;&lt;li&gt;也就是说，在&amp;quot;记录 checkpoint → 分支提交并还原 RAT&amp;quot;的整个窗口期内，这些 archRegID 都不可能被改写。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;因此，checkpoint 只需保存每一行的 valid bit：archRegID 字段在该窗口内保持稳定，无需额外快照。&lt;/p&gt;</description></item></channel></rss>