• register renaming 实现流程是怎么样的?

  • 分支预测,在确定最终结果是否正确之前,是否已经计算好部分分支?

  • 以下是9.27玩讨论的过程:
    林: 再次仔细研读了5.7.1和看了wiki后.关于寄存器重名(register renaming)是如何实现的。简单来说就是,存在两种寄存器:过渡寄存器和结果寄存器。在branch中,cpu会先算出所有分支的结结果,但它们暂时还不会写到结果寄存器里而是写到过渡寄存器,因为只有当processor已经确定branch的结果的时候,才会将那个符合结果的过渡寄存器里的内容写到结果寄存器里。
    林:不符合结果的那些过渡寄存器会被消除所有内容,就是清零的意思.
    林:用来确保他们下次还可以当过渡寄存器。
    标识符t就是来表示可以访问这些过渡寄存器.
    林:这个也可以用来做那个data
    forwarding 就是第四章流水线4.5.5
    嘉俊:应该不是branch吧,所有结果是conditional move
    泽楷:那个queue,文章说"information about it..."这里的information指的是指令本身,还是指令涉及到的寄存器?
    嘉俊:应该是计算结果?
    嘉俊:我的猜测是处理结果和一些指令的信息
    嘉俊:虽然我是作pending write理解的,如果确定应该被执行就应用,不该被执行就flush
    林:discaring any results that may have been computed.
    吴:猜测是,fetch到了ins后,对两个branch的数据都进行处理,并储存与队列中;如果其中一个branch出现了,就写入到寄存器中?
    泽鑫:as an ins is decodeed,the info ……
    结合这一段的第一句说retirement unit 是用来保证ISA要求的顺序
    我认为这个info应该是指所有指令的信息,放在队列里 ,以保证ISA的顺序
    泽鑫:下面那个branch说的是另一个事,是说如果该指令计算完并且关系到他的所有条件跳转都满足就可以retire——写寄存器
    泽鑫:现在一次100多条指令并行,我感觉恐怕会分支都计算完,不然要是在队列里的指令发现condition不满足要重新算,队列里后面的指令不是要等超久.
    嘉俊:怕不是对的,整条计算链被砍掉亏的不是一点两点
    泽鑫:噢好像也是,如果分支都执行了,那就没有预测错误的损耗了.
    力铭:两个分支都算,肯定要存储中间状态
    林:过渡寄存器
    吴:buffer
    林:even executing these operations before it has been determined whether or not the branch prediction was correct.
    林:按这意思,在决定哪个是对的时候,已经开始算分支的情况了。
    吴:是不是在决定是否取用分支方向之前就把结果计算好了?
    力铭:否则清楚错误执行流 重新开始在正确的执行流开始预测?
    嘉俊:就是Speculation啊,如果执行了这条指令,在执行这条的时候就xxxxx
    泽鑫:看到那个寄存器重命名我已经放弃理解处理器怎么搞的了,知道他干了什么就算了[捂脸]
    力铭:@泽鑫 只知道那个是用来传数据的…
    嘉俊:现代处理器还有分支预测,应该是部分