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中的变量都躺枪了