乱序执行
-
解决RAW数据依赖(True dependency),提高指令并行。WAW,WAR事实上是处理器寄存器资源不足导致的。
-
issue:准备将某条指令送入某个队列执行 dispath:某条指令进入某个队列开始执行
-
Load/Store指令需要和内存交互,执行时间是无法静态确定的(如cache miss,TLB miss等等)
-
内部执行实际是数据流控制。
-
超标量执行和乱序执行并不等价:乱序执行是指令执行顺序可以调换,超标量是可以有执行队列,两者融合一般可以提升更多性能。
记分牌算法
- Seymour Cray 设计CDC6600(超级计算机之父)
- 每次需要使用寄存器或者执行功能部件时,实现检查其是否准备好。
Issue:相当于ID的前半部分,检查是否有WAW冒险和结构冒险,若有则阻塞等待,否则发射指令,更新记分牌。
Read operand:相当于ID后半部分,检查是否有RAW冒险,所有源操作数是否可用。如果可以执行,记分牌通知执行单元开始执行,否则缓存指令等待执行。
Execution:执行完后通知记分牌
Write Result:检查WAR冒险。若有则保留结果暂时不写回。 - 按序发射,乱序执行、写回
- 优点:提高指令并行,实现简单
- 缺点:WAR和WAW的stall , 功能部件只能执行一条指令或者