首页 > 解决方案 > 从内存或缓存中获取指令数据的阶段

问题描述

我找不到任何关于现代 CPU 中指令周期或指令流水线的官方(详细)信息(特别是对于 AMD Zen+ 和更新版本)。

考虑以下指令:

ADD MEM, REG

在哪个阶段从内存中获取 [mem] 操作数的数据?在(解码)之前还是在执行阶段?

标签: cpucpu-architecture

解决方案


根据现代微处理器 90 分钟指南!

(...)将 x86 指令动态解码为简单的、类似 RISC 的微指令,然后可以由快速、RISC 风格的寄存器重命名 OOO 超标量内核执行。(...) 大多数 x86 指令解码为 1、2 或 3 μops,而更复杂的指令需要更大的数量。

OOO(乱序执行),意思是:

处理器按照由输入数据和执行单元的可用性支配的顺序执行指令,而不是按照它们在程序中的原始顺序。这样做,处理器可以避免在等待前一条指令完成时处于空闲状态,同时可以处理能够立即独立运行的下一条指令。

来源:维基百科

  1. 原始的 CISC 指令被解码为类似 RISC 的微指令。
  2. 现代 CPU 是超流水线的 -超标量导致指令级并行性,这意味着单核能够并行执行多条指令(以及每个时钟周期多条指令)。
  3. 因为数据依赖于执行顺序不是任意的,所以在给出的示例 ( add [mem], eax) 中,ALU 部分 (μop) 在获取 的值之前无法完全执行[mem]
  4. 内存操作数在执行单独的μop时加载,然后添加μop才能执行。 ”,就像@peter-cordes所说的那样。

推荐阅读