AMD K8 and K10 pipeline
(The microarchitecture of Intel, AMD and VIA CPUs https://www.agner.org/optimize/)
-
流水线结构
- 指令会尽可能少,尽可能晚地在流水线中被拆分。每一条read-modify宏指令会在执行阶段拆分成read和modify微指令,在提交之前重新合并成宏指令。
- K8没有执行单元的执行带宽超过64或者80位,K10则支持128位的浮点执行单元。
- AMD和Intel的最大差别:AMD包括三条并行的流水线。在取指阶段之后,指令就会分布到三个流水线中。在简单的情况下,指令会在相应的流水线提交。
- K10有stack engine,结构类似于Intel的处理器
- 流水线的长度估计是12级,因为测量的错误分支预测代价为12周期
- 流水线的具体结构
- 指令取指1, K10每周期32B,K7/8每周期16B
- 指令取指2+转移预测
- Pick/Scan。能够缓存7条指令,并且会将三条指令分发到三个流水线的译码器中
- 译码1,分解指令
- 译码2,决定输入输出寄存器
- Pack。解码器最多生成六个宏操作,同时被排列成3个执行流水线的三个宏操作行
- Pack/Decode。寄存器重命名。整数寄存器从“integer future file and register file”中读取。将整数指令发射到整数流水线,浮点指令发射到浮点流水线。
- Dispatch(整数)。发射宏操作到RS(3*8)
- Schedule(整数)。乱序调度re