计算机的主要性能指标
第 1 章唯一有计算大题的一节,也是全书性能分析的总口径。
这一节要立住的核心结论只有一句:
主频、CPI、MIPS、峰值 FLOPS——每一个单独拿出来都能骗人。 后面所有章节谈”这个改进有多大用”,用的都是这一节的公式。
机制
静态指标:三个”多宽多大”
| 指标 | 定义 | 边界 |
|---|---|---|
| 机器字长 | CPU 一次能处理的二进制位数 | 通常等于通用寄存器的位数;与存储字长、指令字长没有必然关系 |
| 数据通路带宽 | 数据总线一次能并行传送的位数 | 是外部数据总线宽度,可以小于机器字长 |
| 主存容量 | 主存能存储的信息总量 |
“机器字长 / 存储字长 / 指令字长”三者互不相同,这是高频陷阱:
| 字长 | 是什么 | 由什么决定 |
|---|---|---|
| 机器字长 | CPU 一次处理的位数 | ALU 和通用寄存器宽度 |
| 存储字长 | 一个存储单元的位数 | MDR 位数 |
| 指令字长 | 一条指令的位数 | IR 位数,通常是存储字长的整数倍 |
动态指标:时间才是硬通货
| 指标 | 定义 | 越大越好? |
|---|---|---|
| 响应时间(执行时间) | 一个任务从提交到完成的时间 | 越小越好 |
| 吞吐量 | 单位时间内完成的任务数 | 越大越好 |
| CPU 时钟周期 | 一个时钟节拍的长度 | 越小越好 |
| 主频 | 每秒时钟周期数, | 越大越好 |
| CPI | 执行一条指令平均所需时钟周期数 | 越小越好 |
| IPC | 每个时钟周期完成的指令数, | 越大越好 |
核心公式,全书都在用:
三个因子分别由谁决定——这张表是理解全书优化手段的钥匙:
| 因子 | 主要由什么决定 | 哪一章在动它 |
|---|---|---|
| 程序、编译器、指令系统 | 4.4 CISC 想减少它 | |
| 指令系统 + 微体系结构 | 5.6 流水线想降它;3.5 Cache 想降访存带来的 CPI | |
| 工艺 + 关键路径长度 | 5.6.4 分段越细, |
关联对照:三个因子方向相反,这是全书的核心张力
平均 CPI 必须按动态条数加权
若第
绝不能对各类 CPI 直接取算术平均。
另一个高频错法:
MIPS 与 FLOPS:为什么它们会骗人
若
MIPS 的三条致命缺陷:
- 不同 ISA 的一条指令做的事不一样——CISC 的一条抵 RISC 的五条,比 MIPS 等于比谁的指令更”碎”。
- 同一台机器跑不同程序,MIPS 不同——指令组合变了,CPI 就变了。
- MIPS 高不等于程序快——编译器优化后用更少但更复杂的指令,程序更快而 MIPS 下降。
| 单位 | 数量级 |
|---|---|
| MFLOPS / GFLOPS / TFLOPS / PFLOPS / EFLOPS |
这里的 k、M、G 按十进制解释(
疑问点:现在 CPU 的"骚操作"这么多,为什么营销页面上只有核心数、线程数、主频、睿频、架构、缓存、工艺
这个观察很准,而且它的答案正是这一节存在的理由。
先看那份营销清单是什么东西:
参数 在本书里是什么 为什么能上营销页 核心数、线程数 5.7.3、5.7.2 一个整数,谁都会比大小 主频、睿频 本节的 一个数字,单调 缓存容量 3.5 一个数字 工艺(nm) 1.1.1 的集成度 一个数字,越小越先进 架构(代号) 1.2.4 的”组成” 一个名字,用来表示”新一代” 共同点:全都是”一个可以直接比大小的数,而且与跑什么程序无关”。
再看没上榜的那些”骚操作”是什么:
分支预测器的准确率、乱序窗口有多深、有几个执行端口、Cache 的组相联度和替换策略、预取器的激进程度、TLB 有多大、访存流水线能容忍多少个未完成的缺失……
它们全都有同一个毛病:收益取决于跑什么程序。
营销参数 微结构”骚操作” 是不是一个数 ✅ ❌ 是一堆参数 能不能直接比大小 ✅ ❌ 更深的乱序窗口不一定更快 收益依不依赖程序 看起来不依赖 强烈依赖 能不能一句话说清 ✅ ❌ 分支预测器从 95% 提到 97%,对分支密集的程序可能提速 10%,对科学计算可能一点用没有。 这种东西没法印在包装盒上。
而这一节要教的恰恰是:那份营销清单本身也是不可靠的。
主频最典型。 由
,主频只是三个因子之一。历史上最著名的反例是奔腾 4:为了把主频冲上 3.8 GHz,把流水线加到 31 级,结果 涨了但 涨得更多,实际性能反被主频更低的对手压制。这正是 5.6.4 里”流水线段数不是越多越好”那条结论的现实版本。 所以业界真正用来比较的是基准程序(Benchmark)——见下一小节。营销页上的参数是给消费者看的代理指标,基准程序才是这一节承认的评价方式。
最后一层,也是最值得记的一层:那些”骚操作”其实是被间接卖掉的。
“架构”这一栏就是它们的打包名。 说”这是 Zen 5 架构”,卖的正是那一整套没法逐条列出的微结构改进。营销不是不卖它们,是把它们压缩成了一个代号——因为除此之外没有别的办法把它们变成一个可比的量。
这件事在考试里的对应结论是:1.2.4 说”组成对程序员透明”,透明的东西没法直接标价。可见的(主频、核心数)能标价,透明的(分支预测、乱序)只能靠一个架构名字和最终的基准分数说话。
基准程序:唯一诚实的评价方式
基准程序(Benchmark)是用一组有代表性的真实程序来测性能。
它比单一指标可靠,但仍有边界:
- 结果只对测试覆盖的负载负责——用 SPEC 的分数推断游戏性能不成立。
- 必须固定编译器版本、优化选项、输入规模、系统配置,否则不可比。
- 归一化性能比的汇总用几何平均,不能用算术平均。
阿姆达尔定律:局部优化的天花板
设可优化部分占原时间比例
这个公式说的话很朴素:不能被优化的那部分,最终会成为天花板。
算例。 某功能占原时间
局部快 4 倍,整体只快 43%。 而即使把它加速到无穷倍,
两个必须防的错法:
①
② 多核加速比要代
三种”提高性能”的说法要分清
| 说法 | 含义 |
|---|---|
| ”A 的性能是 B 的 | |
| "A 比 B 快 | |
| "执行时间减少 |
“时间减少 20%“对应”性能提高 25%“——两个数字不一样,题目问哪个就答哪个。
边界
| 说法 | 判断 | 理由 |
|---|---|---|
| ”主频越高性能越好” | ❌ | 还要看 |
| “机器字长 = 存储字长” | ❌ | 三个字长互相独立 |
| ” | ❌ | 是动态执行条数 |
| ”各类指令的 CPI 直接取平均” | ❌ | 必须按动态条数加权 |
| ”MIPS 可以比较不同 ISA 的机器” | ❌ | 一条指令做的事不同 |
| ”MIPS 越大程序跑得越快” | ❌ | 见三条缺陷 |
| ”峰值 FLOPS 代表实际性能” | ❌ | 是理论上限 |
| ”CPU 时间 = 程序运行的墙钟时间” | ❌ | 墙钟还含 I/O 等待、调度等待 |
| ”局部加速 | ❌ | 阿姆达尔 |
| ” | ✅ | 同一统计口径下成立 |
| ” | ❌ | 超标量可以(5.6.5) |
| “1 GHz 主频的时钟周期是 1 ns” | ✅ |
对照速查
| 主频 | 时钟周期 |
|---|---|
| 1 GHz | 1 ns |
| 2 GHz | 0.5 ns |
| 500 MHz | 2 ns |
| 200 MHz | 5 ns |
| 三个字长 | 由什么决定 |
|---|---|
| 机器字长 | ALU / 通用寄存器宽度 |
| 存储字长 | MDR 位数 |
| 指令字长 | IR 位数 |
审题四问:①
考点
及两台机器的比较——必考。 - 加权平均 CPI。
- 阿姆达尔定律及其上限。
- MIPS 的局限。
- 三个字长的区分。
- “快
“与”时间减少 “的换算。
链接
- 🏠 返回总览:计算机组成原理第 1 章:计算机系统概述总览
- ⬅️ 上一节:1.2.5 计算机系统的工作原理
- ➡️ 下一节:1.3.2 几个专业术语
- 🔗 三因子方向相反:4.4.3 CISC 和 RISC 的比较
- 🔗 流水线怎么动
与 :5.6.4 流水线的性能指标 - 🔗 Cache 怎么动
:3.5.2 Cache 的基本工作原理 - 🔗 多核的加速比:5.7.3 多核处理器的基本概念
- 📖 名词库:第 1 章名词库