← 返回学习笔记

Lecture 2:知识 - 计算机性能指标

408 学习笔记:Lecture 2:知识 - 计算机性能指标。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。

本页目录

描述:性能题先辨别“容量、位宽、时间、频率、平均周期数、指令条数”分别在说什么,再使用统一关系式。主频高不自动代表程序更快,必须同时考虑 CPI 与指令条数。

1.1 容量与位宽指标

名称 含义 高频辨析
字(word) 被处理信息的基本单位,用于度量数据类型宽度 x86 传统上把 16 位称为一个字
机器字长 CPU 整数数据通路宽度,通常与 ALU、通用寄存器位数相关 反映整数处理能力
指令字长 一条指令包含的二进制位数 在本 PDF 所采用的常见字节可寻址模型中通常为字节整数倍,并常取存储字长的整数倍;一般体系结构仍应以其编码和最小可寻址单位为准
存储字长 一个存储单元保存的位数 与 MDR 宽度通常相等
数据通路带宽 一次可并行传输的数据位数 本讲通常指外部数据总线宽度,不必等于 CPU 内部总线/寄存器宽度
定义:#主存容量

主存可保存信息的最大量,可用字节数表示,也可写为“字数 $\times$ 字长”。

  • MAR 有 $m$ 位,表示可寻址 $2^m$ 个存储单元;MDR 有 $n$ 位,表示每单元宽 $n$ 位。
  • 例如 MAR 为 16 位、MDR 为 32 位:单元数 $2^{16}=64K$,容量为 $64K\times32$ 位,即 $64K\times4$ B。
  • 在“一次访存至多读出一个存储字、指令按存储字边界对齐且忽略 Cache”的教材模型中,若指令字长是存储字长的两倍,取一条指令需 2 个访存周期;二者相等时,取指通常只需 1 个访存周期。不要把“指令字长”误当“机器字长”。

1.2 系统时间与速度

1.2.1 吞吐量和响应时间

指标 含义 关注点
吞吐量 单位时间处理请求的数量 适合衡量批处理、服务器等整体能力
响应时间 从提交请求到获得结果的总历时(墙钟时间) 包含 CPU 时间与各类等待时间,适合衡量交互体验
  • 吞吐量受输入、取指、主存读写、输出等环节共同影响;系统主存的存取周期往往是关键限制。
  • 响应时间除了程序实际占用 CPU 的时间,还包括磁盘、存储器、I/O、调度和 OS 开销造成的等待。

1.2.2 时钟周期、主频与 CPI

定义:#时钟周期与主频

时钟周期 $T$ 是相邻两个同相位有效时钟边沿之间的时间,也是同步 CPU 推进状态的基本时间单位;教材有时简称为“主时钟脉冲的宽度”,但严格说它不等于高电平或低电平的脉冲宽度。主频 $f$ 是时钟频率,二者互为倒数:

$$f=\frac{1}{T}$$

  • 时钟周期需覆盖相邻状态单元间组合逻辑的最大延迟;流水线机器中还要计入最慢流水段的组合逻辑延迟、流水寄存器开销和必要的时钟裕量。
  • 同型号、同微结构且其他条件近似时,主频越高,完成一个时钟步骤的时间越短;跨架构比较不能只看主频。
定义:#CPI

**CPI(Cycles Per Instruction)**是平均每条指令需要的时钟周期数。不同指令耗时可不同,程序 CPI 是按动态执行次数加权的平均值。

若第 $i$ 类指令动态执行 $IC_i$ 次、每条需 $CPI_i$ 个周期,则

$$ CPI_{avg}=\frac{\sum_i IC_i\times CPI_i}{\sum_i IC_i} $$

处理器类型 CPI 特征
单周期 CPU 所有指令一个时钟周期完成,$CPI=1$
多周期 CPU 一条指令拆成多个时钟周期完成,$CPI>1$
基本流水线 理想、流水线充满时每周期完成一条指令,$CPI=1$;有冒险时一般 $CPI>1$
超标量流水线 具备同周期发射/完成多条指令的能力;资源利用充分且并行度足够时平均 $CPI$ 可小于 1,但受相关、分支失误和 Cache 未命中影响时并不保证小于 1

1.3 性能公式与单位

1.3.1 CPU 执行时间

CPU 性能由指令条数、CPI、主频共同决定:

$$ \begin{aligned} \text{CPU 时钟周期数} &= \text{指令条数}\times CPI\ \text{CPU 执行时间} &= \frac{\text{指令条数}\times CPI}{\text{主频}} \end{aligned} $$

  • 要缩短 CPU 时间,可减少动态指令数、降低平均 CPI 或提高主频;优化一种因素时可能伤害另一种,必须算总结果。
  • 程序 $A$ 比 $B$ 快 $k$ 倍,按执行时间定义为 $T_B/T_A=k$;性能与执行时间成反比。

教材补充:加速比与局部优化上限

NOTE · 教材补充(非源 PDF) 性能比较不能只看“被优化部分快了多少”,还要看它原来占总时间的比例。Amdahl 定律把这一边界写成可计算形式。

若可优化部分原来占执行时间比例为 $f$,该部分获得 $s$ 倍加速,其余部分不变,则总体加速比为:

$$ S=\frac{T_{old}}{T_{new}} =\frac{1}{(1-f)+\frac{f}{s}} $$

  • 即使把该部分加速到无限快,整体加速比上限仍为 $S_{max}=1/(1-f)$;未被优化的串行部分决定天花板。
  • 若有多个彼此独立的优化部分,可把新时间分别写成原时间比例再相加,而不能把各自加速比直接相乘。
  • 例:访存停顿占原时间 40%,将其加速 5 倍,则 $S=1/(0.6+0.4/5)\approx1.47$,不是 5 倍。
  • 若题目同时改变指令数、CPI 和主频,应优先分别计算优化前后的 $T=IC\times CPI/f$;Amdahl 定律适合题目明确给出“某部分时间占比和局部加速倍数”的场景。

1.3.2 IPS、MIPS 与 FLOPS

指标 含义 公式/备注
IPS 每秒执行指令数 $IPS=\dfrac{\text{主频}}{CPI}$
MIPS 每秒百万条指令数 $MIPS=\dfrac{\text{指令条数}}{\text{执行时间}\times10^6}=\dfrac{\text{主频}}{CPI\times10^6}$
FLOPS 每秒浮点运算次数 适合浮点密集型任务,不能概括所有程序性能

源 PDF 按十进制前缀逐项列出 FLOPS 单位:

单位 名称 换算
MFLOPS Mega FLOPS $10^6,\text{FLOPS}$
GFLOPS Giga FLOPS $10^9,\text{FLOPS}$
TFLOPS Tera FLOPS $10^{12},\text{FLOPS}$
PFLOPS Peta FLOPS $10^{15},\text{FLOPS}$
EFLOPS Exa FLOPS $10^{18},\text{FLOPS}$
ZFLOPS Zetta FLOPS $10^{21},\text{FLOPS}$
  • 上表相邻单位相差 $10^3$;例如 $93,PFLOPS=93\times10^{15}=9.3\times10^{16}$ FLOPS。
  • 注意大小写:存储容量语境中 $K=2^{10}$ 常见;性能数量级中的 k、M、G 等常按 $10^3$ 递进,必须看题目约定。
  • MIPS 与主频都不能脱离指令集、CPI 和程序特征直接比较不同机器;一条“指令”在不同 ISA 上完成的工作量可能完全不同。

源 PDF 最后一页还专门对照了速率与容量单位:

量 基本单位 常用换算 读题要点
数据传输速率 b/s(bit/s) $1,kb/s=10^3,b/s$,$1,Mb/s=10^6,b/s$,$1,Gb/s=10^9,b/s$,$1,Tb/s=10^{12},b/s$ 小写 b 表示 bit,网络速率通常按十进制前缀
存储容量 B(Byte) $1,B=8,b$;408 题常约定 $1,KB=2^{10},B$、$1,MB=2^{20},B$、$1,GB=2^{30},B$ 大写 B 表示字节;严格 SI/IEC 记法中 $2^{10},B$ 写作 KiB,做题以题设约定为准

因此 10 b/s 表示每秒 10 bit,不是每秒 10 B;容量与速率之间换算时还必须处理 $1,B=8,b$。

题型:#性能比较

第一部分:解题方法

  • 统一时间单位,先写 $T=IC\times CPI/f$。
  • 给出多类指令时,先算平均 $CPI=\sum_i CPI_i\times\dfrac{IC_i}{IC}$。
  • 题目给“优化后指令数变化、CPI 变化、主频变化”时,分别代入优化前后公式,再取时间比。
  • 不把“访存次数”直接当“时钟周期数”;除非题目明确给出命中时间、存取周期或各阶段耗时。

第二部分:易错点

  • 单周期 CPU 的 CPI 是 1,但其时钟周期必须按最慢指令确定,未必比多周期机器快。
  • 基本流水线的理想 $CPI=1$ 指的是稳态吞吐率;第一条指令仍要经历多个流水段,存在装入和排空时间。
  • “字长”“指令字长”“存储字长”“数据总线宽度”是四个不同维度,不能因数值相同就等同。

相关知识

1.4 本节复盘

  • MAR 决定可寻址单元数,MDR 与存储字长对应;容量可写为字数乘字长。
  • 主频 $f$ 和时钟周期 $T$ 满足 $f=1/T$,但衡量程序速度还需 CPI 和动态指令条数。
  • 计算 CPU 时间的主公式是 $T=IC\times CPI/f$;IPS、MIPS 都可由主频和 CPI 推出。局部优化还应按 Amdahl 定律计入未优化部分,不能把局部倍数当整体倍数。
  • 评估系统整体能力用吞吐量,评估一次请求等待用响应时间;比较异构机器不能只看主频或 MIPS。