4.18 处理器性能分析

CPI:每指令周期数

CPI(Cycles Per Instruction,每指令周期数)是衡量处理器性能的核心指标之一:

  • 理想流水线 CPI = 1:每个周期完成一条指令
  • 实际流水线 CPI > 1:冒险和暂停导致周期浪费
  • CPI 越接近 1,流水线的效率越高

CPI 的计算公式:

CPI = 总时钟周期数 / 总指令数

气泡对CPI的影响

不同类型的气泡对 CPI 的影响:

冒险类型气泡数量额外 CPI 贡献
加载使用冒险1 个气泡+1 CPI
条件分支预测错误2 个气泡+2 CPI
ret 指令3 个气泡+3 CPI

假设程序中各事件的发生频率:

  • 加载指令占 25%,其中 20% 产生加载使用冒险(概率 20%)
  • 条件分支占 20%,其中 60% 预测错误(“总是预测跳转”策略下,不跳转即错误)

则平均 CPI = 1 + 0.25 × 0.2 × 1 + 0.2 × (1 - 0.6) × 2 = 1 + 0.05 + 0.16 = 1.21

现代超标量CPU

现代处理器早已超越简单的标量流水线:

  • 超标量(Superscalar):每个周期发射多条指令
  • 深度流水线:管线深度达 14~20 级
  • 乱序执行:指令不按程序顺序执行
  • 投机执行:基于分支预测提前执行

因此现代 CPU 的指令平均周期数可以远小于 1(IPC > 1,即每周期完成多条指令)。

CPE与CPI的关系

CPE(Cycles Per Element,每元素周期数)是在 CPI 基础上更进一步的概念,用于衡量循环处理每个数据元素的平均周期数:

  • CPI 衡量指令级别的效率
  • CPE 衡量算法/数据级别的效率
  • 两者都与流水线效率密切相关
  • 优化 CPE = 优化流水线利用率 + 减少数据依赖

性能分析的工程意义

理解 CPI 的构成有助于:

  1. 识别程序中的性能瓶颈(数据相关、分支预测、加载使用)
  2. 指导编译器优化(指令调度、循环展开)
  3. 评估不同微架构设计的优劣

相关笔记

链接到