2023-10-26讨论班
当代CPU微架构简介
指令级是微架构无关的,微架构在CPU内部
流水线有性能瓶颈
- 拆得太细利用率低【bubble】
微架构前端
- 将指令转为和当前CPU相关的微指令
- 一个串行的length decoder之后是多个并行的decoder
- Complex decoder和多个Simple decoder,前者负责解码重要的、改变CPU状态的指令(从ROM中读解码规则【CPU中的软件】,因此可以升级CPU)
- decode部分占的晶体管不多,主要是branch predication
微架构中端
- 目标:乱序/并行地执行uop
- 难点
- 数据依赖
- def & use:每个计算赋值操作都可以换名,cpu内部的寄存器要多于ISP规定的寄存器。如此可以减少依赖长度,支持并行
- 为什么对eax赋值要set rax高32位?将eax的使用看作rax的def,从而将减少依赖长度【eax与ax没这个关系,那个时候架构还不像现在这样】
- 分支不确定
- guess:分支历史表、跳转目标表
- 顺序Commit+回滚:所以用到的寄存器只有在commit之后才被释放
- 串行指令:例如换页表、控制寄存器等,会对后面的指令产生剧烈影响
- 分支指令:猜错相当于串行指令
- 长周期指令:例如cache miss,tlb miss等,阻塞commit队列
- 数据依赖
多核架构
多数民用cpu都保证cache一致性
- 同一个cacheline可以被共享读,但独占写
- 和锁变量在同一个cacheline中的变量都躺枪了