《深入浅出计算机组成原理》学习笔记 Day19

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

冒险和预测三

乱序执行

尽管代码生成的指令是顺序的但是如果后面的指令和前面的指令独立完全不需要等待前面的指令运算完成可以先执行。

这种解决方案称为乱序执行Out-of-Order Execution。

在这里插入图片描述

  1. 在取指令和指令译码的时候乱序执行的 CPU 和其他使用流水线架构的 CPU 是一样的它会一级一级顺序地进行取指令和指令译码工作。
  2. 在译码完成后CPU 不会直接进行指令执行而是进行一次指令分发把指令转发到一个保留栈Reservation Stations。
  3. 这些指令不会立即执行而是等待它们所依赖的数据传递给它们后才会执行。
  4. 一旦指令依赖的数据来齐了指令就可以交到后面的功能单元Function Unit其实就是 ALU 去执行。
  5. 指令执行的阶段完成之后我们并不能立刻将结果写回到寄存器里而是把结果再存放到一个叫做重排序缓冲区Re-Order Buffer。
  6. 实际的指令的计算结果数据并不是直接写到内存或者高速缓存里而是先写入存储缓冲区Store Buffer最终才会写入到高速缓存和内存里面。

在乱序执行的情况下只有 CPU 内部指令的执行层面可能是“乱序”的。只要我们能在指令的译码阶段正确地分析出指令之间的数据依赖关系这个“乱序”就只会在互相没有影响的指令之间发生。

即便指令的执行过程中是乱序的我们在最终指令的计算结果写入到寄存器和内存之前依然会进行一次排序以确保所有指令在外部看来仍然是有序完成的。

整个乱序执行技术就好像在指令的执行阶段提供一个“线程池”。指令不再是顺序执行的而是根据池里所拥有的资源以及各个任务是否可以进行执行进行动态调度。在执行完成之后又重新把结果在一个队列里面按照指令的分发顺序重新排序。即使内部是“乱序”的但是在外部看起来仍然是井井有条地顺序执行。

参考

极客时间《深入浅出计算机组成原理》

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6