从提取缓冲区中,Dojo 的解码器每个周期可以处理来自两个线程的八条指令。我对“每个周期两个线程”的含义有点困惑,因为具有 SMT 的 CPU 通常每个周期处理一个线程并在周期边界上切换线程。也许 Dojo 将解码器分成两个集群,并选择两个线程在每个循环中为它们提供数据。这可能会减少所采用分支的解码吞吐量损失。
在解码时,某些指令(如branches, predicated operations和immediate loads (“list parsing”) )可以在前端执行并从pipeline中删除。这有点像更新的 x86 CPU 在重命名器(renamer)中消除了寄存器到寄存器的副本。但是您没听错——Dojo 不会通过pipeline跟踪“已消除”的指令以维持in-order retirement。其他处理器跟踪所有内容以退出,以便它们可以在任何指令边界处停止,并保持恢复执行所需的所有状态。这种能力被称为“precise exceptions”,现代操作系统使用它来提供各种好东西,比如paging to disk,或者告诉你你的代码到底在哪里搞砸了。