处理器架构中的指令调度与执行技术解析
1. 投机调度与重放机制
在处理器架构中,投机调度是一种重要的技术。调度器可以扩展到具有多个条目的发行队列,通过添加唤醒总线及其相关逻辑,实现每个时钟周期发行多条指令。在投机调度下,多个已发行的依赖指令可以同时向其功能单元前进。投机调度器会确保父指令和子指令之间的流水线时钟数至少为父指令的操作延迟。
不过,对于加载指令,其操作延迟在调度时难以预测。大多数情况下,加载指令能在一级缓存(L1)命中,延迟为L1的访问时间;但当L1未命中时,值的返回会延迟,依赖该加载指令的指令会被错误调度,此时需要修复调度。可以通过将加载指令及后续指令通过指令缓存(I-cache)和重排序缓冲区(ROB)进行重放来解决,就好像加载指令是一个错误预测的分支一样。
通常,也可以设计更轻量级的重放机制,直接从发行队列重放指令。每个物理寄存器都有一个满/空(F/E)位,目标寄存器的F/E位在指令分发时被重置,在功能单元(FU)执行后寄存器值被转发或写入时置位。当指令离开调度器时,会被复制到重放队列。如果指令在寄存器阶段时,其输入寄存器的F/E位被重置(由检查器验证),则该指令被错误调度,需要重新循环执行;如果指令通过检查,则被检查器丢弃。错过调度的指令不会设置其目标寄存器的F/E位,因此错误调度会通过依赖于第一个错误调度指令的指令链传播。
2. 突破数据流限制:值预测
即使采用投机调度,依赖指令仍需等待其父指令的执行延迟满足后才能被调度。从表面上看,在输入操作数可用之前开始执行指令似乎是不可能的。一个计算可以映射到其数据流图,图中每个节点是一条指令,每个依赖关系由父指令和子指令之间的有向弧表示,弧上标注父指令的执行延迟。由于每条指令在开始执行
超级会员免费看
订阅专栏 解锁全文

949

被折叠的 条评论
为什么被折叠?



