Appearance
计算机的性能指标
大纲定位
对应大纲第一章(三)计算机的性能指标:吞吐量、响应时间;CPU 时钟周期、主频、CPI、CPU 执行时间;MIPS、MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS。
考情分析
这一节的计算题套路很固定,一个核心公式打天下。真正拉开差距的是三个"以为自己懂了"的地方:程序的 CPI 从哪来(它不是一个由指令集定死的常数)、只加速一部分时整体快多少、时钟周期是谁定的。下面把这三处单独拎出来讲。
吞吐量与响应时间
- 吞吐量:系统在单位时间内处理请求的数量
- 响应时间:从用户发出请求到系统返回结果的总等待时间
响应时间不等于 CPU 时间。它还包含磁盘访问、I/O、操作系统开销、多道程序下等待其他程序的时间。
| 时间口径 | 含义 |
|---|---|
| 用户 CPU 时间 | CPU 执行该用户程序本身所花的时间 |
| 系统 CPU 时间 | CPU 为该程序执行操作系统代码(系统调用等)所花的时间 |
| CPU 时间 | 上面两者之和 |
| 响应时间(墙钟时间) | CPU 时间 + I/O 等待 + 其他程序占用 CPU 的时间 |
题面说"用户 CPU 时间"时,用的就是标准公式
——它已经是纯 CPU 口径了,不要再往里加什么。
主频与时钟周期
- CPU 时钟周期:CPU 工作的最小时间单位
- 主频(时钟频率):每秒包含的时钟周期数,单位 Hz
主频 2GHz 意味着每秒
时钟信号是怎么来的、由谁定长短
这段每一句都是判断题的原材料:
- 来源:时钟脉冲信号由机器脉冲源(晶振)发出的脉冲信号,经整形和分频后形成。
- 时钟周期的定义:时钟脉冲信号的宽度就是时钟周期,它的倒数是主频。
- 周期长短由谁决定:以相邻两个状态单元(寄存器/触发器)之间组合逻辑电路的最大延迟为基准确定。信号必须在一个周期内从上一级寄存器出发、穿过组合逻辑、稳定地到达下一级寄存器的输入端——所以最长的那条路径决定了周期不能再短。这条路径就是关键路径。
一个时钟脉冲 ≠ 一条指令
"处理器每来一个时钟脉冲就开始执行一条新指令"是错误说法。只有单周期 CPU 才是一条指令一个周期。
| CPU 类型 | 时钟周期怎么定 | 一个周期做多少事 |
|---|---|---|
| 单周期 | = 最耗时那条指令的完整执行时间 | 一条完整指令(CPI = 1,但周期极长) |
| 多周期 | = 单个执行步骤的关键路径(远短于单周期) | 一条指令的一个阶段(CPI > 1) |
| 流水线 | = 最长流水段的延迟 + 锁存器开销 | 每条指令的一个流水段;理想稳态下每周期完成一条 |
流水线的"每周期完成一条指令"说的是吞吐,不是"每周期开始一条全新指令的全部执行"——一条指令仍然要跨多个周期才走完。
同一型号 CPU 主频越高执行越快,但不同型号的 CPU 不能仅凭主频比较性能——CPI 和指令条数都可能不同。
CPI 与 IPS
CPI(Cycles Per Instruction):执行一条指令所需的平均时钟周期数。
IPS(Instructions Per Second):每秒执行的指令条数。
不同类型指令的 CPI 不同,程序的 CPI 是加权平均:
其中
程序的 CPI 不是常数
这是本节最容易被误解的一条
上面那个加权平均公式只算了"指令本身理想情况下要几个周期"。真实程序的 CPI 还要加上执行过程中被迫等待的周期,其中最大的一块是 Cache 缺失。
举个数:理想 CPI = 1.0,每条指令平均访存 1.3 次,缺失率 5%,缺失代价 100 个周期。
缺失率降到 2%,CPI 就降到
所以"程序的 CPI 与 Cache 缺失率无关"是错的。除了 Cache 缺失,流水线冒险造成的阻塞、分支预测失败的开销,也都会算进程序实测的 CPI 里。
一句话:指令的 CPI 由指令类型和微架构决定;程序的 CPI 是运行时测出来的,跟访存行为、缺失率、冒险全部相关。
CPU 执行时间(核心公式)
CPU 性能取决于三个要素:指令条数、CPI、主频。三者由不同的层次决定,也因此可以从不同层次去优化:
| 要素 | 主要受谁影响 | 优化手段举例 |
|---|---|---|
| 指令条数 | 指令集 + 编译器 | 编译优化、更强的指令 |
| CPI | 微架构(数据通路、流水线、Cache) | 优化数据通路、增大 Cache |
| 主频 | 工艺 + 关键路径长度 | 提高工艺、缩短关键路径 |
由这张表可以直接判定"能缩短程序执行时间的措施":提高时钟频率(降低
)、优化数据通路结构(降低 CPI)、对程序进行编译优化(减少指令条数)——三条都能,因为它们分别打在公式的三个因子上。
CISC 与 RISC 的取舍也在这个公式里:CISC 指令条数少但 CPI 高、主频难提;RISC 指令条数多但 CPI 低、主频容易提。
只加速一部分:整体能快多少
考场上出现频率不低、却常被漏讲的一类题:系统里只有一部分变快了,整体时间是多少。
方法只有一句话:把总时间拆成"能加速的"和"不能加速的"两段,只除能加速的那段。
其中
两个必须分清的措辞
- "速度提高 50%""性能是原来的 1.5 倍"
,时间除以 1.5 - "时间减少 50%"
时间直接乘 0.5
把"速度提高 50%"错当成"时间减少 50%",是这类题唯一的失分点。
推论:
MIPS
MIPS 表示每秒执行多少百万条指令。
局限性:不同机器指令集不同,一条指令的功能强度不等,MIPS 不适合跨指令集比较。一台机器 MIPS 高,可能只是因为它的指令做的事少,完成同一任务反而要更多条指令。
FLOPS 系列
FLOPS 表示每秒执行的浮点运算次数(不是指令条数)。
| 指标 | 含义 | 数量级 | 中文 |
|---|---|---|---|
| MFLOPS | 百万次浮点运算/秒 | 百万次 | |
| GFLOPS | 十亿次 | ||
| TFLOPS | 万亿次 | ||
| PFLOPS | 千万亿次 | ||
| EFLOPS | 百亿亿次 | ||
| ZFLOPS | 十万亿亿次 |
算例:某程序含
浮点部分耗时
K/M/G 的两种含义
| 场景 | K | M | G |
|---|---|---|---|
| 存储容量 | |||
| 速率 / 频率 / 运算次数 |
基准程序
基准程序(Benchmarks)是一组专门用于性能评测的标准程序:在不同机器上运行同一套程序并比较执行时间。
局限性:硬件或编译器可能针对基准程序的关键代码做特殊优化,使评测结果不能代表处理一般负载的能力。
考场动作清单
- 先把三个量凑齐:指令条数、CPI、主频。题面给什么就填什么,缺哪个就用其他两个和时间反推。
- CPI 是加权的就先加权:
,比例记得化成小数。 - 看清问的是时间、速度还是比值。问"运行时间的比值"就把两台机器各算一遍再相除,不要试图直接约。
- 只加速一部分时先拆段:不可加速部分原样保留,只除可加速部分。
- 单位换算放最后:MIPS 记得除
;秒和毫秒、微秒差三个数量级,选项里往往就靠这个区分。
例题
例 1(三要素反推):机器 M 主频 1.5GHz,程序 P 的指令条数
解:
注意 0.4ms 不是 0.4μs——差三个数量级,两个都在选项里。
例 2(加权 CPI):主频 1GHz,程序共 10000 条指令,其中 80% 平均需 1 个时钟周期,20% 平均需 10 个时钟周期。求平均 CPI 和 CPU 执行时间。
解:
例 3(同 ISA 比性能):M1 与 M2 的 ISA 相同,主频分别 1.5GHz 和 1.2GHz,运行程序 P 的平均 CPI 分别为 2 和 1。求 P 在 M1 和 M2 上运行时间的比值。
解:ISA 相同
M1 主频更高却更慢——CPI 是 2 倍,抵消还有余。这就是"主频不能单独比性能"的具体样子。
例 4(编译优化):程序 P 在机器 M 上执行 20 秒。编译优化后指令数减少到原来的 70%,CPI 增加到原来的 1.2 倍。求新的执行时间。
解:主频不变,时间正比于"指令数
例 5(MIPS):主频 1.2GHz,四类指令占比与 CPI 为 A(50%, 2)、B(20%, 3)、C(10%, 4)、D(20%, 5)。求 MIPS。
解:
例 6(只加速一部分):基准程序 A 运行 100 秒,其中 90 秒为 CPU 时间,其余为 I/O 时间。若 CPU 速度提高 50%、I/O 速度不变,运行 A 需要多少时间?
解:先拆段。I/O 的 10 秒一秒都不会变。
- "速度提高 50%"
,CPU 时间 秒 - 总时间
秒
常见错解 55 秒 =
的变体,来自把整个 100 秒都当成可加速部分。整体加速比只有 ,低于 CPU 部分的 1.5——被那 10 秒 I/O 拖住了。
例 7(超算单位):某超级计算机浮点运算速度为 93.0146 PFLOPS,即每秒完成多少次浮点操作?
解:
别在这里用
——速率类指标一律十进制。
交互可视化
易混淆知识点
1. 主频高就一定快吗?
不一定。CPU 执行时间 = 指令条数
2. MIPS 数越大性能越好吗?
不一定,且不能跨指令集比较。见 MIPS 一节。
3. 翻译程序、汇编程序、编译程序、解释程序有什么区别?
翻译程序是统称,包括汇编程序和编译程序。汇编程序把汇编语言翻译成机器语言;编译程序把高级语言整体翻译成目标代码后再执行;解释程序对高级语言逐条翻译并立即执行,不生成目标程序。详见 计算机系统层次结构。
考点清单
- CPU 执行时间 = 指令条数
CPI / 主频(最核心公式) - CPI = 总时钟周期数 / 指令条数;IPS = 主频 / CPI;MIPS = 主频 / (CPI
) - 程序的 CPI 受 Cache 缺失率、流水线阻塞影响,不是由指令集定死的常数
- 时钟脉冲由脉冲源经整形分频产生;时钟周期由相邻状态单元间组合逻辑的最大延迟决定
- 单周期时钟周期 = 最耗时指令;多周期 = 单步关键路径;流水线 = 最长流水段
- 一个时钟脉冲不等于开始一条新指令
- 只加速一部分时:
,"速度提高 50%"是除以 1.5 - MIPS 不能跨指令集比较;FLOPS 数的是浮点运算次数
- 存储用
,速率用 - 基准程序存在针对性优化的局限